diff --git a/bench/Makefile b/bench/Makefile
index 50cdb7d58a49b54aa912272e93cb3d3a202fb601..01fc85b6fe4ec48c8c48cd80bfb6ff54a22c075b 100755
--- a/bench/Makefile
+++ b/bench/Makefile
@@ -119,13 +119,13 @@ INCS = $(BSP_INCS) -Isic
 
 FLAGS_STR := "$(RISCV_CFLAGS)  $(RISCV_LDFLAGS) "
 
-CFLAGS ?= -DPREALLOCATE=1 -fvisibility=hidden -DSTDIO_THRU_UART -Os -mcmodel=medany -static -Wall -pedantic
+CFLAGS ?= -DPREALLOCATE=1 -fvisibility=hidden -DSTDIO_THRU_UART -O2 -mcmodel=medany -static -Wall -pedantic
 
 RISCV_CFLAGS := -DPERFORMANCE_RUN=1 \
 		-DITERATIONS=3 \
 		-DFLAGS_STR=\"$(FLAGS_STR)\" \
 		-Wno-unknown-pragmas \
-		-DPREALLOCATE=1 -fvisibility=hidden -DSTDIO_THRU_UART -Os -mcmodel=medany -static -Wall -pedantic
+		-DPREALLOCATE=1 -fvisibility=hidden -DSTDIO_THRU_UART -O2 -mcmodel=medany -static -Wall -pedantic
 
 RISCV_LDFLAGS = -Lbuild/ -lcva6 -static -nostartfiles -T bsp/config/link.ld
 
diff --git a/bench/kernel/binarysearch/binarysearch.c b/bench/kernel/binarysearch/binarysearch.c
index e539ed8a664a7060485f64abbe9d3d2568a307c5..c81ea236535edf62a1e0f5d1c0930e6387eda50d 100755
--- a/bench/kernel/binarysearch/binarysearch.c
+++ b/bench/kernel/binarysearch/binarysearch.c
@@ -150,8 +150,13 @@ void _Pragma( "entrypoint" ) binarysearch_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  binarysearch_init();
-  binarysearch_main();
+  sicsetup();
+
+  {
+    binarysearch_init();
+    binarysearch_main();
+
+  }
 
   siccsrs();
   return ( binarysearch_return() - ( -1 ) != 0 );
diff --git a/bench/kernel/bitcount/bitcount.c b/bench/kernel/bitcount/bitcount.c
index 07a97f9ef9baf7e7c87f7e7cdad0b67584bb1092..97082ca4bb956b6f4aef68f568ac30e4cc05727d 100755
--- a/bench/kernel/bitcount/bitcount.c
+++ b/bench/kernel/bitcount/bitcount.c
@@ -140,8 +140,13 @@ void _Pragma( "entrypoint" ) bitcount_main()
 #include <siccsrs.h>
 int main( void )
 {
-  bitcount_init();
-  bitcount_main();
+  sicsetup();
+
+  {
+    bitcount_init();
+    bitcount_main();
+
+  }
 
   siccsrs();
   return ( bitcount_return() );
diff --git a/bench/kernel/bitonic/bitonic.c b/bench/kernel/bitonic/bitonic.c
index b51e966a9959d3a8c474a87ba42101d9e88e031a..aa28595ba85b6b468306fe43f0691a2fa9e6accd 100755
--- a/bench/kernel/bitonic/bitonic.c
+++ b/bench/kernel/bitonic/bitonic.c
@@ -151,8 +151,13 @@ void _Pragma ( "entrypoint" ) bitonic_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  bitonic_init();
-  bitonic_main();
+  sicsetup();
+
+  {
+    bitonic_init();
+    bitonic_main();
+
+  }
 
   siccsrs();
   return ( bitonic_return() );
diff --git a/bench/kernel/bsort/bsort.c b/bench/kernel/bsort/bsort.c
index b1911e5404121365f58a0450c83ae834e07fa26e..b0f018518c47039ed2847073a99af7f73f0d355d 100755
--- a/bench/kernel/bsort/bsort.c
+++ b/bench/kernel/bsort/bsort.c
@@ -126,8 +126,13 @@ void _Pragma( "entrypoint" ) bsort_main( void )
 
 int main( void )
 {
-  bsort_init();
-  bsort_main();
+  sicsetup();
+
+  {
+    bsort_init();
+    bsort_main();
+
+  }
 
   siccsrs();
   return bsort_return();
diff --git a/bench/kernel/complex_updates/complex_updates.c b/bench/kernel/complex_updates/complex_updates.c
index fa1cc58b21ae20471fbd558f7f644641db388526..4abc57df204d03c6a669eec73a9a2ab0517297d1 100755
--- a/bench/kernel/complex_updates/complex_updates.c
+++ b/bench/kernel/complex_updates/complex_updates.c
@@ -129,9 +129,14 @@ void _Pragma( "entrypoint" ) complex_updates_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  complex_updates_init();
+  sicsetup();
 
-  complex_updates_main();
+  {
+    complex_updates_init();
+
+    complex_updates_main();
+
+  }
 
   siccsrs();
   return complex_updates_return();
diff --git a/bench/kernel/cosf/cosf.c b/bench/kernel/cosf/cosf.c
index 4175c5bf1186bb24684ba8b8199edf1a2b64fd51..9493ea13f84a265d149288efc9d6cd137e4c08f8 100755
--- a/bench/kernel/cosf/cosf.c
+++ b/bench/kernel/cosf/cosf.c
@@ -80,8 +80,13 @@ void _Pragma( "entrypoint" ) cosf_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  cosf_init();
-  cosf_main();
+  sicsetup();
+
+  {
+    cosf_init();
+    cosf_main();
+  }
+
   siccsrs();
   return cosf_return();
 }
diff --git a/bench/kernel/countnegative/countnegative.c b/bench/kernel/countnegative/countnegative.c
index d3975b5934deb0024e8c1beb982a4d3e4bfc3a06..d419a0b1615d0179505d14292b3e8722b396a54d 100755
--- a/bench/kernel/countnegative/countnegative.c
+++ b/bench/kernel/countnegative/countnegative.c
@@ -134,8 +134,13 @@ void _Pragma( "entrypoint" ) countnegative_main ( void )
 #include <siccsrs.h>
 int main( void )
 {
-  countnegative_init();
-  countnegative_main();
+  sicsetup();
+
+  {
+    countnegative_init();
+    countnegative_main();
+
+  }
 
   siccsrs();
   return ( countnegative_return() );
diff --git a/bench/kernel/cubic/cubic.c b/bench/kernel/cubic/cubic.c
index 0222718e4b1b2b988b68270471769beb4a9288ad..e2c4f5d6d772a8dbd1b03a67dd17dc8fe3ef2910 100755
--- a/bench/kernel/cubic/cubic.c
+++ b/bench/kernel/cubic/cubic.c
@@ -151,8 +151,13 @@ void cubic_solveCubic( float a, float b, float c, float d,
 #include <siccsrs.h>
 int main( void )
 {
-  cubic_init();
-  cubic_main();
+  sicsetup();
+
+  {
+    cubic_init();
+    cubic_main();
+  }
+
   siccsrs();
   return cubic_return();
 }
diff --git a/bench/kernel/deg2rad/deg2rad.c b/bench/kernel/deg2rad/deg2rad.c
index 769f109af564bbf039692ce174c189dc2e4e689f..d583404cdf624b494c275d30276e8b03b7efc15f 100755
--- a/bench/kernel/deg2rad/deg2rad.c
+++ b/bench/kernel/deg2rad/deg2rad.c
@@ -85,8 +85,13 @@ void _Pragma( "entrypoint" ) deg2rad_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  deg2rad_init();
-  deg2rad_main();
+  sicsetup();
+
+  {
+    deg2rad_init();
+    deg2rad_main();
+  }
+
   siccsrs();
   return deg2rad_return();
 }
diff --git a/bench/kernel/fac/fac.c b/bench/kernel/fac/fac.c
index 60583cfacee27c10dc69178dd568a6ea185e6144..1515c950a35039eb868509d031dbe5823ee15e26 100755
--- a/bench/kernel/fac/fac.c
+++ b/bench/kernel/fac/fac.c
@@ -90,8 +90,13 @@ void _Pragma( "entrypoint" ) fac_main ()
 #include <siccsrs.h>
 int main ( void )
 {
-  fac_init();
-  fac_main();
+  sicsetup();
+
+  {
+    fac_init();
+    fac_main();
+
+  }
 
   siccsrs();
   return ( fac_return() );
diff --git a/bench/kernel/fft/fft.c b/bench/kernel/fft/fft.c
index c0aca2ee2112e831f91daf453eada6378ca57321..f98855c40f59e1b1e4debfa763f04559a04f1419 100755
--- a/bench/kernel/fft/fft.c
+++ b/bench/kernel/fft/fft.c
@@ -326,9 +326,14 @@ void _Pragma( "entrypoint" ) fft_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  fft_init();
+  sicsetup();
 
-  fft_main();
+  {
+    fft_init();
+
+    fft_main();
+
+  }
 
   siccsrs();
   return fft_return();
diff --git a/bench/kernel/filterbank/filterbank.c b/bench/kernel/filterbank/filterbank.c
index 46b92de0e3d435871678e2cb2a764554fa61f548..b3ec2cd057f8d2da08318d10a1b6707fca3af39c 100755
--- a/bench/kernel/filterbank/filterbank.c
+++ b/bench/kernel/filterbank/filterbank.c
@@ -164,8 +164,13 @@ void filterbank_core( float r[ 256 ],
 
 int main( void )
 {
-  filterbank_init();
-  filterbank_main();
+  sicsetup();
+
+  {
+    filterbank_init();
+    filterbank_main();
+
+  }
 
   siccsrs();
   return filterbank_return();
diff --git a/bench/kernel/fir2dim/fir2dim.c b/bench/kernel/fir2dim/fir2dim.c
index 982d2ff74fd8029eeb2713be2d6f2ead63e92c92..c64fd8de0cdd1cbc421e37e11b4b7d6bae2fed07 100755
--- a/bench/kernel/fir2dim/fir2dim.c
+++ b/bench/kernel/fir2dim/fir2dim.c
@@ -192,8 +192,13 @@ void _Pragma( "entrypoint" ) fir2dim_main()
 #include <siccsrs.h>
 int main( void )
 {
-  fir2dim_init();
-  fir2dim_main();
+  sicsetup();
+
+  {
+    fir2dim_init();
+    fir2dim_main();
+
+  }
 
   siccsrs();
   return ( fir2dim_return() );
diff --git a/bench/kernel/iir/iir.c b/bench/kernel/iir/iir.c
index 6f1183c0394f0fd1865f1e44623120ca0fa54e2c..367ee6ae513483a01e563b5696a1dc39dee7e4f9 100755
--- a/bench/kernel/iir/iir.c
+++ b/bench/kernel/iir/iir.c
@@ -157,8 +157,13 @@ void _Pragma( "entrypoint" ) iir_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  iir_init();
-  iir_main();
+  sicsetup();
+
+  {
+    iir_init();
+    iir_main();
+
+  }
 
   siccsrs();
   return ( iir_return() - 400 != 0 );
diff --git a/bench/kernel/insertsort/insertsort.c b/bench/kernel/insertsort/insertsort.c
index fa5cafb096686632228d51a516a7a9580f997212..276abe2c21848091f670d8dfcd76ac848f48e316 100755
--- a/bench/kernel/insertsort/insertsort.c
+++ b/bench/kernel/insertsort/insertsort.c
@@ -133,8 +133,13 @@ void _Pragma( "entrypoint" ) insertsort_main()
 #include <siccsrs.h>
 int main( void )
 {
-  insertsort_init();
-  insertsort_main();
+  sicsetup();
+
+  {
+    insertsort_init();
+    insertsort_main();
+  }
+
   siccsrs();
   return ( insertsort_return() );
 }
diff --git a/bench/kernel/isqrt/isqrt.c b/bench/kernel/isqrt/isqrt.c
index 812b4f8db1aebf38e1f559e01ad4c34c998316df..5cfa8bcd15e93463e929d3c46f80091b179c665a 100755
--- a/bench/kernel/isqrt/isqrt.c
+++ b/bench/kernel/isqrt/isqrt.c
@@ -150,8 +150,13 @@ void _Pragma( "entrypoint" ) isqrt_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  isqrt_init();
-  isqrt_main();
+  sicsetup();
+
+  {
+    isqrt_init();
+    isqrt_main();
+  }
+
   siccsrs();
   return isqrt_return();
 }
diff --git a/bench/kernel/jfdctint/jfdctint.c b/bench/kernel/jfdctint/jfdctint.c
index 05ac75f1da1d6191466c962759a9dd56135f3988..865b206a596ae1a2aad1ec920a470d0f26847e45 100755
--- a/bench/kernel/jfdctint/jfdctint.c
+++ b/bench/kernel/jfdctint/jfdctint.c
@@ -313,8 +313,13 @@ void _Pragma ( "entrypoint" ) jfdctint_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  jfdctint_init();
-  jfdctint_main();
+  sicsetup();
+
+  {
+    jfdctint_init();
+    jfdctint_main();
+
+  }
 
   siccsrs();
   return ( jfdctint_return() );
diff --git a/bench/kernel/ludcmp/ludcmp.c b/bench/kernel/ludcmp/ludcmp.c
index 8021934843ad7565e94a09eef88b074c3db206e4..95de218db255444e1f48bc53a5e615b17ce514a9 100755
--- a/bench/kernel/ludcmp/ludcmp.c
+++ b/bench/kernel/ludcmp/ludcmp.c
@@ -171,8 +171,13 @@ void _Pragma( "entrypoint" ) ludcmp_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  ludcmp_init();
-  ludcmp_main();
+  sicsetup();
+
+  {
+    ludcmp_init();
+    ludcmp_main();
+
+  }
 
   siccsrs();
   return ( ludcmp_return() );
diff --git a/bench/kernel/matrix1/matrix1.c b/bench/kernel/matrix1/matrix1.c
index 73e06d7d2bf5b50d7eb2046dc507bf52e2786951..6078029d2307782994e5007e8c510bab443399b3 100755
--- a/bench/kernel/matrix1/matrix1.c
+++ b/bench/kernel/matrix1/matrix1.c
@@ -163,8 +163,13 @@ void _Pragma ( "entrypoint" ) matrix1_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  matrix1_init();
-  matrix1_main();
+  sicsetup();
+
+  {
+    matrix1_init();
+    matrix1_main();
+
+  }
 
   siccsrs();
   return matrix1_return();
diff --git a/bench/kernel/md5/md5.c b/bench/kernel/md5/md5.c
index 3ee3ee907486ec0ccd25a3bfbfee87de69d2d26b..7700da94821035181def948ac9efc79b0bed03df 100755
--- a/bench/kernel/md5/md5.c
+++ b/bench/kernel/md5/md5.c
@@ -625,9 +625,14 @@ void _Pragma( "entrypoint" ) md5_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  md5_init();
-  md5_main();
+  sicsetup();
+
+  {
+    md5_init();
+    md5_main();
   // printf("%d\n", ret);
+  }
+
   siccsrs();
   return md5_return();
 }
diff --git a/bench/kernel/minver/minver.c b/bench/kernel/minver/minver.c
index 3808d22dd25cc77f6715f2636e09cc4fba4e76e8..67e680b7d8ec975a10f78d1aa674589efd02634d 100755
--- a/bench/kernel/minver/minver.c
+++ b/bench/kernel/minver/minver.c
@@ -250,8 +250,13 @@ void _Pragma( "entrypoint" ) minver_main()
 #include <siccsrs.h>
 int main( void )
 {
-  minver_init();
-  minver_main();
+  sicsetup();
+
+  {
+    minver_init();
+    minver_main();
+
+  }
 
   siccsrs();
   return ( minver_return() );
diff --git a/bench/kernel/pm/pm.c b/bench/kernel/pm/pm.c
index 2e8a8102bef34c92ff0d176c2df4f5858bfd8b16..c15d96fc7d45907575b5e032fd08d19799816a84 100755
--- a/bench/kernel/pm/pm.c
+++ b/bench/kernel/pm/pm.c
@@ -737,8 +737,13 @@ int pm_kernel( pm_data_t *pmdata )
 
 int main( void )
 {
-  pm_init();
-  pm_main();
+  sicsetup();
+
+  {
+    pm_init();
+    pm_main();
+
+  }
 
   siccsrs();
   return pm_return();
diff --git a/bench/kernel/prime/prime.c b/bench/kernel/prime/prime.c
index 225d966242d9191b375efb81361e758640925e13..0119c7b009037ad41e6b5127e562d4d2540d06f9 100755
--- a/bench/kernel/prime/prime.c
+++ b/bench/kernel/prime/prime.c
@@ -131,8 +131,13 @@ void _Pragma( "entrypoint" ) prime_main()
 #include <siccsrs.h>
 int main( void )
 {
-  prime_init();
-  prime_main();
+  sicsetup();
+
+  {
+    prime_init();
+    prime_main();
+
+  }
 
   siccsrs();
   return ( prime_return() ) ;
diff --git a/bench/kernel/quicksort/quicksort.c b/bench/kernel/quicksort/quicksort.c
index 2cc77f774d3043cfdc12d0753c6c242b3c4232e5..16d13edc3df798af74228f795941c1c85d552d81 100755
--- a/bench/kernel/quicksort/quicksort.c
+++ b/bench/kernel/quicksort/quicksort.c
@@ -239,8 +239,13 @@ void _Pragma ( "entrypoint" ) quicksort_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  quicksort_init();
-  quicksort_main();
+  sicsetup();
+
+  {
+    quicksort_init();
+    quicksort_main();
+
+  }
 
   siccsrs();
   return ( quicksort_return() - 1527923179 != 0 );
diff --git a/bench/kernel/rad2deg/rad2deg.c b/bench/kernel/rad2deg/rad2deg.c
index 1e1c558547ae8a470bf8f80f092742706b1ce24c..004c2ab246a17037c7f4aca32c9c5935be0473e2 100755
--- a/bench/kernel/rad2deg/rad2deg.c
+++ b/bench/kernel/rad2deg/rad2deg.c
@@ -84,8 +84,13 @@ void _Pragma ( "entrypoint" ) rad2deg_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  rad2deg_init();
-  rad2deg_main();
+  sicsetup();
+
+  {
+    rad2deg_init();
+    rad2deg_main();
+  }
+
   siccsrs();
   return rad2deg_return();
 }
diff --git a/bench/kernel/recursion/recursion.c b/bench/kernel/recursion/recursion.c
index 5ff366c11297f7b797290474eaaa383b4a161976..8ec85d37268e636c5e61ef0721303f0f4d04bd2f 100755
--- a/bench/kernel/recursion/recursion.c
+++ b/bench/kernel/recursion/recursion.c
@@ -67,8 +67,13 @@ void _Pragma( "entrypoint" ) recursion_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  recursion_init();
-  recursion_main();
+  sicsetup();
+
+  {
+    recursion_init();
+    recursion_main();
+  }
+
   siccsrs();
   return ( recursion_return() );
 }
diff --git a/bench/kernel/sha/sha.c b/bench/kernel/sha/sha.c
index 6a97be0a4c87d2b9592097f6958232b7501276af..c3d407a1052c1cb54af880174400a00641562bdd 100755
--- a/bench/kernel/sha/sha.c
+++ b/bench/kernel/sha/sha.c
@@ -214,8 +214,13 @@ int sha_return( void )
 #include <siccsrs.h>
 int main ( void )
 {
-  sha_init();
-  sha_main();
+  sicsetup();
+
+  {
+    sha_init();
+    sha_main();
+  }
+
   siccsrs();
   return ( sha_return() );
 }
diff --git a/bench/kernel/st/st.c b/bench/kernel/st/st.c
index fae99aa95743bc902b3a1c7c9011079eb0d5435f..770dc3c87f4256f93597b12c31505e433256e1ea 100755
--- a/bench/kernel/st/st.c
+++ b/bench/kernel/st/st.c
@@ -220,8 +220,13 @@ void _Pragma( "entrypoint" ) st_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  st_init();
-  st_main();
+  sicsetup();
+
+  {
+    st_init();
+    st_main();
+
+  }
 
   siccsrs();
   return ( st_return() );
diff --git a/bench/sequential/adpcm_dec/adpcm_dec.c b/bench/sequential/adpcm_dec/adpcm_dec.c
index 63ee9f0466c245ad927e0802bd5ccad8978f7b70..bcc973faeb54b16eddad675d501f4cfa4e4b7fca 100755
--- a/bench/sequential/adpcm_dec/adpcm_dec.c
+++ b/bench/sequential/adpcm_dec/adpcm_dec.c
@@ -704,8 +704,13 @@ void _Pragma( "entrypoint" ) adpcm_dec_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  adpcm_dec_init();
-  adpcm_dec_main();
+  sicsetup();
+
+  {
+    adpcm_dec_init();
+    adpcm_dec_main();
+
+  }
 
   siccsrs();
   return ( adpcm_dec_return() );
diff --git a/bench/sequential/adpcm_enc/adpcm_enc.c b/bench/sequential/adpcm_enc/adpcm_enc.c
index dfd3247db9121c763a449cfa10430aeea78ac2f2..ea285cdf1e4f3b94812a966dd593adc112c5a317 100755
--- a/bench/sequential/adpcm_enc/adpcm_enc.c
+++ b/bench/sequential/adpcm_enc/adpcm_enc.c
@@ -748,8 +748,13 @@ void _Pragma( "entrypoint" ) adpcm_enc_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  adpcm_enc_init();
-  adpcm_enc_main();
+  sicsetup();
+
+  {
+    adpcm_enc_init();
+    adpcm_enc_main();
+
+  }
 
   siccsrs();
   return adpcm_enc_return();
diff --git a/bench/sequential/ammunition/ammunition.c b/bench/sequential/ammunition/ammunition.c
index 8b7d1fefd48d371b8ca929afd77ebc9f047dbca4..29ef76589227cb0a6d6f72605aa61c016d81aacc 100755
--- a/bench/sequential/ammunition/ammunition.c
+++ b/bench/sequential/ammunition/ammunition.c
@@ -1173,8 +1173,13 @@ void _Pragma( "entrypoint" ) ammunition_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  ammunition_init();
-  ammunition_main();
+  sicsetup();
+
+  {
+    ammunition_init();
+    ammunition_main();
+
+  }
 
   siccsrs();
   return ( ammunition_return() );
diff --git a/bench/sequential/anagram/anagram.c b/bench/sequential/anagram/anagram.c
index 17fae9b7a17d08c8a35d9fb1c77b1bab2bd7213d..c2e2340e699326914663307a7e6026da4634a10a 100755
--- a/bench/sequential/anagram/anagram.c
+++ b/bench/sequential/anagram/anagram.c
@@ -654,8 +654,13 @@ void _Pragma( "entrypoint" ) anagram_main( void )
 
 int main( void )
 {
-  anagram_init();
-  anagram_main();
+  sicsetup();
+
+  {
+    anagram_init();
+    anagram_main();
+
+  }
 
   siccsrs();
   return anagram_return();
diff --git a/bench/sequential/audiobeam/audiobeam.c b/bench/sequential/audiobeam/audiobeam.c
index bc5aafa71e7a042c0ad7c9af1339f09e5a827915..897175251e48ee6c9e1f71e4e7ef73ec5937129f 100755
--- a/bench/sequential/audiobeam/audiobeam.c
+++ b/bench/sequential/audiobeam/audiobeam.c
@@ -578,8 +578,13 @@ void _Pragma( "entrypoint" ) audiobeam_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  audiobeam_init();
-  audiobeam_main();
+  sicsetup();
+
+  {
+    audiobeam_init();
+    audiobeam_main();
+
+  }
 
   siccsrs();
   return ( audiobeam_return() );
diff --git a/bench/sequential/cjpeg_transupp/cjpeg_transupp.c b/bench/sequential/cjpeg_transupp/cjpeg_transupp.c
index 7e4db2504119d065a15b017fc766dc8263248482..47cbdea0da8784b3f8ba9f08a66bced8854833a0 100755
--- a/bench/sequential/cjpeg_transupp/cjpeg_transupp.c
+++ b/bench/sequential/cjpeg_transupp/cjpeg_transupp.c
@@ -706,8 +706,13 @@ void _Pragma ( "entrypoint" ) cjpeg_transupp_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  cjpeg_transupp_init();
-  cjpeg_transupp_main();
+  sicsetup();
+
+  {
+    cjpeg_transupp_init();
+    cjpeg_transupp_main();
+
+  }
 
   siccsrs();
   return ( cjpeg_transupp_return() - 660 != 0 );
diff --git a/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c b/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c
index 6fc80642a3e7715dbe0ed4eed73cbc773962e640..0ced012affc39619e81b502beeca6d17799496f1 100755
--- a/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c
+++ b/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c
@@ -210,8 +210,13 @@ int cjpeg_wrbmp_return()
 #include <siccsrs.h>
 int main( void )
 {
-  cjpeg_wrbmp_init();
-  cjpeg_wrbmp_main();
+  sicsetup();
+
+  {
+    cjpeg_wrbmp_init();
+    cjpeg_wrbmp_main();
+
+  }
 
   siccsrs();
   return ( cjpeg_wrbmp_return() );
diff --git a/bench/sequential/dijkstra/dijkstra.c b/bench/sequential/dijkstra/dijkstra.c
index 99e7157a603ecfd8c296b93852b7d046d798c8f7..8216a50be9892b7a35a8b183122f8b289fc3e725 100755
--- a/bench/sequential/dijkstra/dijkstra.c
+++ b/bench/sequential/dijkstra/dijkstra.c
@@ -191,8 +191,13 @@ void _Pragma( "entrypoint" ) dijkstra_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  dijkstra_init();
-  dijkstra_main();
+  sicsetup();
+
+  {
+    dijkstra_init();
+    dijkstra_main();
+
+  }
 
   siccsrs();
   return ( dijkstra_return() );
diff --git a/bench/sequential/epic/epic.c b/bench/sequential/epic/epic.c
index f9ee0da8b8c14135057c2e7b2e9a56cad0735eef..4b76106ae2df53f7fad67da4e389cf680c2c2352 100755
--- a/bench/sequential/epic/epic.c
+++ b/bench/sequential/epic/epic.c
@@ -1130,8 +1130,13 @@ int epic_return()
 #include <siccsrs.h>
 int main( void )
 {
-  epic_init();
-  epic_main();
+  sicsetup();
+
+  {
+    epic_init();
+    epic_main();
+
+  }
 
   siccsrs();
   return epic_return();
diff --git a/bench/sequential/fmref/fmref.c b/bench/sequential/fmref/fmref.c
index 3e00ceaf5a7f97d3f176a5565d645aa05ba0011e..7aaf47a0f92085bce71b645cc9e629a54816c42e 100755
--- a/bench/sequential/fmref/fmref.c
+++ b/bench/sequential/fmref/fmref.c
@@ -75,8 +75,13 @@ int fmref_return( void )
 #include <siccsrs.h>
 int main( void )
 {
-  fmref_init();
-  fmref_main();
+  sicsetup();
+
+  {
+    fmref_init();
+    fmref_main();
+  }
+
   siccsrs();
   return fmref_return();
 }
diff --git a/bench/sequential/g723_enc/g723_enc.c b/bench/sequential/g723_enc/g723_enc.c
index bf557a2f14efd95910340cc73e5dc7704609ae7b..f0a6acf518fd8a67181502b3d2d280757ace3cc6 100755
--- a/bench/sequential/g723_enc/g723_enc.c
+++ b/bench/sequential/g723_enc/g723_enc.c
@@ -871,8 +871,13 @@ void _Pragma( "entrypoint" ) g723_enc_main()
 #include <siccsrs.h>
 int main( void )
 {
-  g723_enc_init();
-  g723_enc_main();
+  sicsetup();
+
+  {
+    g723_enc_init();
+    g723_enc_main();
+
+  }
 
   siccsrs();
   return ( g723_enc_return() );
diff --git a/bench/sequential/gsm_dec/gsm_dec.c b/bench/sequential/gsm_dec/gsm_dec.c
index 550cacd7a3db86598bde1cd2b337febe736dff20..7b041dbc96f67383e25331c771eb83e04a702d60 100755
--- a/bench/sequential/gsm_dec/gsm_dec.c
+++ b/bench/sequential/gsm_dec/gsm_dec.c
@@ -751,8 +751,13 @@ void _Pragma( "entrypoint" ) gsm_dec_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  gsm_dec_init();
-  gsm_dec_main();
+  sicsetup();
+
+  {
+    gsm_dec_init();
+    gsm_dec_main();
+  }
+
   siccsrs();
   return ( gsm_dec_return() );
 }
diff --git a/bench/sequential/gsm_enc/gsm_enc.c b/bench/sequential/gsm_enc/gsm_enc.c
index 83b00acb109536edc800920bcac4071450c63129..c08c3a5a21b55e0b3738a300b5a86dd5b0cfbe2b 100755
--- a/bench/sequential/gsm_enc/gsm_enc.c
+++ b/bench/sequential/gsm_enc/gsm_enc.c
@@ -2218,8 +2218,13 @@ void _Pragma( "entrypoint" ) gsm_enc_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  gsm_enc_init();
-  gsm_enc_main();
+  sicsetup();
+
+  {
+    gsm_enc_init();
+    gsm_enc_main();
+  }
+
   siccsrs();
   return ( gsm_enc_return() );
 }
diff --git a/bench/sequential/h264_dec/h264_dec.c b/bench/sequential/h264_dec/h264_dec.c
index 32664be492146eabaed2d80b7f8af736a1a53aae..d314f7b730ea44dc5ea9e8d2c11e78b9dde6036c 100755
--- a/bench/sequential/h264_dec/h264_dec.c
+++ b/bench/sequential/h264_dec/h264_dec.c
@@ -597,8 +597,13 @@ void _Pragma( "entrypoint" )  h264_dec_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  h264_dec_init();
-  h264_dec_main();
+  sicsetup();
+
+  {
+    h264_dec_init();
+    h264_dec_main();
+
+  }
 
   siccsrs();
   return ( h264_dec_return() );
diff --git a/bench/sequential/huff_dec/huff_dec.c b/bench/sequential/huff_dec/huff_dec.c
index 33947573a4743fef11d80081c042686cd80710f9..15add883034a433271231182e31447e7090a1748 100755
--- a/bench/sequential/huff_dec/huff_dec.c
+++ b/bench/sequential/huff_dec/huff_dec.c
@@ -377,8 +377,13 @@ void _Pragma( "entrypoint" ) huff_dec_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  huff_dec_init();
-  huff_dec_main();
+  sicsetup();
+
+  {
+    huff_dec_init();
+    huff_dec_main();
+  }
+
   siccsrs();
   return ( huff_dec_return() );
 }
diff --git a/bench/sequential/huff_enc/huff_enc.c b/bench/sequential/huff_enc/huff_enc.c
index 18baf7fa3e44414853d7d37f33139bca5146144d..eb3805ced97c7f65e3b8880b7e4ae0ca77024f43 100755
--- a/bench/sequential/huff_enc/huff_enc.c
+++ b/bench/sequential/huff_enc/huff_enc.c
@@ -584,8 +584,13 @@ void _Pragma( "entrypoint" ) huff_enc_main()
 #include <siccsrs.h>
 int main( void )
 {
-  huff_enc_init();
-  huff_enc_main();
+  sicsetup();
+
+  {
+    huff_enc_init();
+    huff_enc_main();
+  }
+
   siccsrs();
   return ( huff_enc_return() );
 }
diff --git a/bench/sequential/mpeg2/mpeg2.c b/bench/sequential/mpeg2/mpeg2.c
index 091c8d5044d1da32a9f4db9ba8e60b2f41827f68..0463c60b0e38092945dace599dfbf47eb901dd47 100755
--- a/bench/sequential/mpeg2/mpeg2.c
+++ b/bench/sequential/mpeg2/mpeg2.c
@@ -13206,8 +13206,13 @@ void _Pragma ( "entrypoint" ) mpeg2_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  mpeg2_init();
-  mpeg2_main();
+  sicsetup();
+
+  {
+    mpeg2_init();
+    mpeg2_main();
+
+  }
 
   siccsrs();
   return ( mpeg2_return() - ( -116 ) != 0 );
diff --git a/bench/sequential/ndes/ndes.c b/bench/sequential/ndes/ndes.c
index 53551d3aa938dc02eba11b1a2cbb8ab6946b41b4..8b4db5c8c9790b88f32741bbef545a581ff0c3d8 100755
--- a/bench/sequential/ndes/ndes.c
+++ b/bench/sequential/ndes/ndes.c
@@ -384,8 +384,13 @@ void _Pragma( "entrypoint" ) ndes_main()
 
 int main( void )
 {
-  ndes_init();
-  ndes_main();
+  sicsetup();
+
+  {
+    ndes_init();
+    ndes_main();
+
+  }
 
   siccsrs();
   return ( ndes_return() );
diff --git a/bench/sequential/petrinet/petrinet.c b/bench/sequential/petrinet/petrinet.c
index 5c94cda5a1025da07620a63c39f2ff33034c813a..a8b5cbba0aa279a47f15108e4b991b860cc99a0f 100755
--- a/bench/sequential/petrinet/petrinet.c
+++ b/bench/sequential/petrinet/petrinet.c
@@ -976,7 +976,12 @@ int petrinet_return( void )
 #include <siccsrs.h>
 int main( void )
 {
-  petrinet_main();
+  sicsetup();
+
+  {
+    petrinet_main();
+
+  }
 
   siccsrs();
   return ( petrinet_return() );
diff --git a/bench/sequential/rijndael_enc/rijndael_enc.c b/bench/sequential/rijndael_enc/rijndael_enc.c
index 8ed667b1f9aceb325b18abb3daa54513b70a417f..4e41d121fdffe5b9b0feeb44824bc63cd041756f 100755
--- a/bench/sequential/rijndael_enc/rijndael_enc.c
+++ b/bench/sequential/rijndael_enc/rijndael_enc.c
@@ -225,8 +225,13 @@ void _Pragma( "entrypoint" ) rijndael_enc_main( void )
 #include <siccsrs.h>
 int main( void )
 {
-  rijndael_enc_init();
-  rijndael_enc_main();
+  sicsetup();
+
+  {
+    rijndael_enc_init();
+    rijndael_enc_main();
+
+  }
 
   siccsrs();
   return ( rijndael_enc_return() );
diff --git a/bench/sequential/statemate/statemate.c b/bench/sequential/statemate/statemate.c
index 4bda065ef38a4d3fea5a3f2b40a1915211de8175..335aa53b51ea145d34b602d42d85ea93aba34609 100755
--- a/bench/sequential/statemate/statemate.c
+++ b/bench/sequential/statemate/statemate.c
@@ -1272,8 +1272,13 @@ void _Pragma ( "entrypoint" ) statemate_main( void )
 #include <siccsrs.h>
 int main ( void )
 {
-  statemate_init();
-  statemate_main();
+  sicsetup();
+
+  {
+    statemate_init();
+    statemate_main();
+
+  }
 
   siccsrs();
   return statemate_return();
diff --git a/bench/sequential/susan/susan.c b/bench/sequential/susan/susan.c
index c69e921d51cf774bdb4b678e162393f570699274..445ebf561390f6a555bfdf1dda2c79681d23369f 100755
--- a/bench/sequential/susan/susan.c
+++ b/bench/sequential/susan/susan.c
@@ -2502,8 +2502,13 @@ int susan_return( void )
 #include <siccsrs.h>
 int main( void )
 {
-  susan_init();
-  susan_main();
+  sicsetup();
+
+  {
+    susan_init();
+    susan_main();
+
+  }
 
   siccsrs();
   return susan_return();
diff --git a/bench/sic.cocci b/bench/sic.cocci
index 3991c3daa1fa9524f9726be080ade633725ad6bc..7963e51c14f00c30b2b33c50d7bc0300b621b5e9 100644
--- a/bench/sic.cocci
+++ b/bench/sic.cocci
@@ -5,8 +5,12 @@
 
 int main(void)
 {
++ sicsetup();
++
++ {
 ...
-
++ }
++
 + siccsrs();
 
   return ...;
diff --git a/bench/sic.patch b/bench/sic.patch
index e637e3e2f268f85edc3808fa62899f62a2c34257..aa320386fd2ec00a04f5cdaf651028dfe75d9ea6 100644
--- a/bench/sic.patch
+++ b/bench/sic.patch
@@ -1,62 +1,90 @@
 diff -u -p a/sequential/huff_enc/huff_enc.c b/sequential/huff_enc/huff_enc.c
 --- a/sequential/huff_enc/huff_enc.c
 +++ b/sequential/huff_enc/huff_enc.c
-@@ -581,9 +581,11 @@ void _Pragma( "entrypoint" ) huff_enc_ma
+@@ -581,9 +581,16 @@ void _Pragma( "entrypoint" ) huff_enc_ma
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   huff_enc_init();
-   huff_enc_main();
+-  huff_enc_init();
+-  huff_enc_main();
++  sicsetup();
++
++  {
++    huff_enc_init();
++    huff_enc_main();
++  }
++
 +  siccsrs();
    return ( huff_enc_return() );
  }
 diff -u -p a/sequential/adpcm_enc/adpcm_enc.c b/sequential/adpcm_enc/adpcm_enc.c
 --- a/sequential/adpcm_enc/adpcm_enc.c
 +++ b/sequential/adpcm_enc/adpcm_enc.c
-@@ -745,10 +745,12 @@ void _Pragma( "entrypoint" ) adpcm_enc_m
+@@ -745,10 +745,17 @@ void _Pragma( "entrypoint" ) adpcm_enc_m
  
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   adpcm_enc_init();
-   adpcm_enc_main();
- 
+-  adpcm_enc_init();
+-  adpcm_enc_main();
++  sicsetup();
+ 
++  {
++    adpcm_enc_init();
++    adpcm_enc_main();
++
++  }
++
 +  siccsrs();
    return adpcm_enc_return();
  }
 diff -u -p a/sequential/adpcm_dec/adpcm_dec.c b/sequential/adpcm_dec/adpcm_dec.c
 --- a/sequential/adpcm_dec/adpcm_dec.c
 +++ b/sequential/adpcm_dec/adpcm_dec.c
-@@ -701,10 +701,12 @@ void _Pragma( "entrypoint" ) adpcm_dec_m
+@@ -701,10 +701,17 @@ void _Pragma( "entrypoint" ) adpcm_dec_m
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   adpcm_dec_init();
-   adpcm_dec_main();
- 
+-  adpcm_dec_init();
+-  adpcm_dec_main();
++  sicsetup();
+ 
++  {
++    adpcm_dec_init();
++    adpcm_dec_main();
++
++  }
++
 +  siccsrs();
    return ( adpcm_dec_return() );
  }
 diff -u -p a/sequential/fmref/fmref.c b/sequential/fmref/fmref.c
 --- a/sequential/fmref/fmref.c
 +++ b/sequential/fmref/fmref.c
-@@ -72,10 +72,12 @@ int fmref_return( void )
+@@ -72,10 +72,17 @@ int fmref_return( void )
    return 0;
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   fmref_init();
-   fmref_main();
+-  fmref_init();
+-  fmref_main();
++  sicsetup();
++
++  {
++    fmref_init();
++    fmref_main();
++  }
++
 +  siccsrs();
    return fmref_return();
  }
@@ -64,32 +92,46 @@ diff -u -p a/sequential/fmref/fmref.c b/sequential/fmref/fmref.c
 diff -u -p a/sequential/dijkstra/dijkstra.c b/sequential/dijkstra/dijkstra.c
 --- a/sequential/dijkstra/dijkstra.c
 +++ b/sequential/dijkstra/dijkstra.c
-@@ -188,10 +188,12 @@ void _Pragma( "entrypoint" ) dijkstra_ma
+@@ -188,10 +188,17 @@ void _Pragma( "entrypoint" ) dijkstra_ma
    }
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   dijkstra_init();
-   dijkstra_main();
- 
+-  dijkstra_init();
+-  dijkstra_main();
++  sicsetup();
+ 
++  {
++    dijkstra_init();
++    dijkstra_main();
++
++  }
++
 +  siccsrs();
    return ( dijkstra_return() );
  }
 diff -u -p a/sequential/rijndael_enc/rijndael_enc.c b/sequential/rijndael_enc/rijndael_enc.c
 --- a/sequential/rijndael_enc/rijndael_enc.c
 +++ b/sequential/rijndael_enc/rijndael_enc.c
-@@ -222,11 +222,13 @@ void _Pragma( "entrypoint" ) rijndael_en
+@@ -222,11 +222,18 @@ void _Pragma( "entrypoint" ) rijndael_en
    rijndael_enc_encfile( &rijndael_enc_fin, ctx );
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   rijndael_enc_init();
-   rijndael_enc_main();
- 
+-  rijndael_enc_init();
+-  rijndael_enc_main();
++  sicsetup();
+ 
++  {
++    rijndael_enc_init();
++    rijndael_enc_main();
++
++  }
++
 +  siccsrs();
    return ( rijndael_enc_return() );
  }
@@ -97,16 +139,23 @@ diff -u -p a/sequential/rijndael_enc/rijndael_enc.c b/sequential/rijndael_enc/ri
 diff -u -p a/sequential/g723_enc/g723_enc.c b/sequential/g723_enc/g723_enc.c
 --- a/sequential/g723_enc/g723_enc.c
 +++ b/sequential/g723_enc/g723_enc.c
-@@ -868,11 +868,13 @@ void _Pragma( "entrypoint" ) g723_enc_ma
+@@ -868,11 +868,18 @@ void _Pragma( "entrypoint" ) g723_enc_ma
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   g723_enc_init();
-   g723_enc_main();
- 
+-  g723_enc_init();
+-  g723_enc_main();
++  sicsetup();
+ 
++  {
++    g723_enc_init();
++    g723_enc_main();
++
++  }
++
 +  siccsrs();
    return ( g723_enc_return() );
  }
@@ -114,31 +163,44 @@ diff -u -p a/sequential/g723_enc/g723_enc.c b/sequential/g723_enc/g723_enc.c
 diff -u -p a/sequential/ammunition/ammunition.c b/sequential/ammunition/ammunition.c
 --- a/sequential/ammunition/ammunition.c
 +++ b/sequential/ammunition/ammunition.c
-@@ -1170,10 +1170,12 @@ void _Pragma( "entrypoint" ) ammunition_
+@@ -1170,10 +1170,17 @@ void _Pragma( "entrypoint" ) ammunition_
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   ammunition_init();
-   ammunition_main();
- 
+-  ammunition_init();
+-  ammunition_main();
++  sicsetup();
+ 
++  {
++    ammunition_init();
++    ammunition_main();
++
++  }
++
 +  siccsrs();
    return ( ammunition_return() );
  }
 diff -u -p a/sequential/petrinet/petrinet.c b/sequential/petrinet/petrinet.c
 --- a/sequential/petrinet/petrinet.c
 +++ b/sequential/petrinet/petrinet.c
-@@ -973,10 +973,12 @@ int petrinet_return( void )
+@@ -973,10 +973,17 @@ int petrinet_return( void )
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   petrinet_main();
- 
+-  petrinet_main();
++  sicsetup();
+ 
++  {
++    petrinet_main();
++
++  }
++
 +  siccsrs();
    return ( petrinet_return() );
  }
@@ -146,23 +208,30 @@ diff -u -p a/sequential/petrinet/petrinet.c b/sequential/petrinet/petrinet.c
 diff -u -p a/sequential/mpeg2/mpeg2.c b/sequential/mpeg2/mpeg2.c
 --- a/sequential/mpeg2/mpeg2.c
 +++ b/sequential/mpeg2/mpeg2.c
-@@ -13203,10 +13203,12 @@ void _Pragma ( "entrypoint" ) mpeg2_main
+@@ -13203,10 +13203,17 @@ void _Pragma ( "entrypoint" ) mpeg2_main
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   mpeg2_init();
-   mpeg2_main();
- 
+-  mpeg2_init();
+-  mpeg2_main();
++  sicsetup();
+ 
++  {
++    mpeg2_init();
++    mpeg2_main();
++
++  }
++
 +  siccsrs();
    return ( mpeg2_return() - ( -116 ) != 0 );
  }
 diff -u -p a/sequential/anagram/anagram.c b/sequential/anagram/anagram.c
 --- a/sequential/anagram/anagram.c
 +++ b/sequential/anagram/anagram.c
-@@ -647,6 +647,7 @@ void _Pragma( "entrypoint" ) anagram_mai
+@@ -647,14 +647,21 @@ void _Pragma( "entrypoint" ) anagram_mai
  }
  
  
@@ -170,26 +239,42 @@ diff -u -p a/sequential/anagram/anagram.c b/sequential/anagram/anagram.c
  /*
    Main function
  */
-@@ -656,5 +657,6 @@ int main( void )
-   anagram_init();
-   anagram_main();
  
+ int main( void )
+ {
+-  anagram_init();
+-  anagram_main();
++  sicsetup();
+ 
++  {
++    anagram_init();
++    anagram_main();
++
++  }
++
 +  siccsrs();
    return anagram_return();
  }
 diff -u -p a/sequential/audiobeam/audiobeam.c b/sequential/audiobeam/audiobeam.c
 --- a/sequential/audiobeam/audiobeam.c
 +++ b/sequential/audiobeam/audiobeam.c
-@@ -575,11 +575,13 @@ void _Pragma( "entrypoint" ) audiobeam_m
+@@ -575,11 +575,18 @@ void _Pragma( "entrypoint" ) audiobeam_m
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   audiobeam_init();
-   audiobeam_main();
- 
+-  audiobeam_init();
+-  audiobeam_main();
++  sicsetup();
+ 
++  {
++    audiobeam_init();
++    audiobeam_main();
++
++  }
++
 +  siccsrs();
    return ( audiobeam_return() );
  }
@@ -197,84 +282,119 @@ diff -u -p a/sequential/audiobeam/audiobeam.c b/sequential/audiobeam/audiobeam.c
 diff -u -p a/sequential/susan/susan.c b/sequential/susan/susan.c
 --- a/sequential/susan/susan.c
 +++ b/sequential/susan/susan.c
-@@ -2499,10 +2499,12 @@ int susan_return( void )
+@@ -2499,10 +2499,17 @@ int susan_return( void )
    return 0;
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   susan_init();
-   susan_main();
- 
+-  susan_init();
+-  susan_main();
++  sicsetup();
+ 
++  {
++    susan_init();
++    susan_main();
++
++  }
++
 +  siccsrs();
    return susan_return();
  }
 diff -u -p a/sequential/gsm_dec/gsm_dec.c b/sequential/gsm_dec/gsm_dec.c
 --- a/sequential/gsm_dec/gsm_dec.c
 +++ b/sequential/gsm_dec/gsm_dec.c
-@@ -748,9 +748,11 @@ void _Pragma( "entrypoint" ) gsm_dec_mai
+@@ -748,9 +748,16 @@ void _Pragma( "entrypoint" ) gsm_dec_mai
    }
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   gsm_dec_init();
-   gsm_dec_main();
+-  gsm_dec_init();
+-  gsm_dec_main();
++  sicsetup();
++
++  {
++    gsm_dec_init();
++    gsm_dec_main();
++  }
++
 +  siccsrs();
    return ( gsm_dec_return() );
  }
 diff -u -p a/sequential/cjpeg_transupp/cjpeg_transupp.c b/sequential/cjpeg_transupp/cjpeg_transupp.c
 --- a/sequential/cjpeg_transupp/cjpeg_transupp.c
 +++ b/sequential/cjpeg_transupp/cjpeg_transupp.c
-@@ -703,10 +703,12 @@ void _Pragma ( "entrypoint" ) cjpeg_tran
+@@ -703,10 +703,17 @@ void _Pragma ( "entrypoint" ) cjpeg_tran
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   cjpeg_transupp_init();
-   cjpeg_transupp_main();
- 
+-  cjpeg_transupp_init();
+-  cjpeg_transupp_main();
++  sicsetup();
+ 
++  {
++    cjpeg_transupp_init();
++    cjpeg_transupp_main();
++
++  }
++
 +  siccsrs();
    return ( cjpeg_transupp_return() - 660 != 0 );
  }
 diff -u -p a/sequential/huff_dec/huff_dec.c b/sequential/huff_dec/huff_dec.c
 --- a/sequential/huff_dec/huff_dec.c
 +++ b/sequential/huff_dec/huff_dec.c
-@@ -374,9 +374,11 @@ void _Pragma( "entrypoint" ) huff_dec_ma
+@@ -374,9 +374,16 @@ void _Pragma( "entrypoint" ) huff_dec_ma
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   huff_dec_init();
-   huff_dec_main();
+-  huff_dec_init();
+-  huff_dec_main();
++  sicsetup();
++
++  {
++    huff_dec_init();
++    huff_dec_main();
++  }
++
 +  siccsrs();
    return ( huff_dec_return() );
  }
 diff -u -p a/sequential/gsm_enc/gsm_enc.c b/sequential/gsm_enc/gsm_enc.c
 --- a/sequential/gsm_enc/gsm_enc.c
 +++ b/sequential/gsm_enc/gsm_enc.c
-@@ -2215,9 +2215,11 @@ void _Pragma( "entrypoint" ) gsm_enc_mai
+@@ -2215,9 +2215,16 @@ void _Pragma( "entrypoint" ) gsm_enc_mai
                      gsm_enc_gsmdata + i * sizeof( gsm_frame ) );
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   gsm_enc_init();
-   gsm_enc_main();
+-  gsm_enc_init();
+-  gsm_enc_main();
++  sicsetup();
++
++  {
++    gsm_enc_init();
++    gsm_enc_main();
++  }
++
 +  siccsrs();
    return ( gsm_enc_return() );
  }
 diff -u -p a/sequential/ndes/ndes.c b/sequential/ndes/ndes.c
 --- a/sequential/ndes/ndes.c
 +++ b/sequential/ndes/ndes.c
-@@ -379,6 +379,7 @@ void _Pragma( "entrypoint" ) ndes_main()
+@@ -379,12 +379,19 @@ void _Pragma( "entrypoint" ) ndes_main()
    ndes_des( ndes_inp, ndes_key, &ndes_newkey, ndes_isw, &ndes_out );
  }
  
@@ -282,42 +402,63 @@ diff -u -p a/sequential/ndes/ndes.c b/sequential/ndes/ndes.c
  /* main function */
  
  int main( void )
-@@ -386,5 +387,6 @@ int main( void )
-   ndes_init();
-   ndes_main();
- 
+ {
+-  ndes_init();
+-  ndes_main();
++  sicsetup();
+ 
++  {
++    ndes_init();
++    ndes_main();
++
++  }
++
 +  siccsrs();
    return ( ndes_return() );
  }
 diff -u -p a/sequential/h264_dec/h264_dec.c b/sequential/h264_dec/h264_dec.c
 --- a/sequential/h264_dec/h264_dec.c
 +++ b/sequential/h264_dec/h264_dec.c
-@@ -594,10 +594,12 @@ void _Pragma( "entrypoint" )  h264_dec_m
+@@ -594,10 +594,17 @@ void _Pragma( "entrypoint" )  h264_dec_m
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   h264_dec_init();
-   h264_dec_main();
- 
+-  h264_dec_init();
+-  h264_dec_main();
++  sicsetup();
+ 
++  {
++    h264_dec_init();
++    h264_dec_main();
++
++  }
++
 +  siccsrs();
    return ( h264_dec_return() );
  }
 diff -u -p a/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c b/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c
 --- a/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c
 +++ b/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c
-@@ -207,11 +207,13 @@ int cjpeg_wrbmp_return()
+@@ -207,11 +207,18 @@ int cjpeg_wrbmp_return()
    return ( cjpeg_wrbmp_checksum  + ( -209330 ) ) != 0;
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   cjpeg_wrbmp_init();
-   cjpeg_wrbmp_main();
- 
+-  cjpeg_wrbmp_init();
+-  cjpeg_wrbmp_main();
++  sicsetup();
+ 
++  {
++    cjpeg_wrbmp_init();
++    cjpeg_wrbmp_main();
++
++  }
++
 +  siccsrs();
    return ( cjpeg_wrbmp_return() );
  }
@@ -325,48 +466,69 @@ diff -u -p a/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c b/sequential/cjpeg_wrbmp/cjpeg
 diff -u -p a/sequential/epic/epic.c b/sequential/epic/epic.c
 --- a/sequential/epic/epic.c
 +++ b/sequential/epic/epic.c
-@@ -1127,10 +1127,12 @@ int epic_return()
+@@ -1127,10 +1127,17 @@ int epic_return()
    return ( checksum == 43968 ? 0 : 1 );
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   epic_init();
-   epic_main();
- 
+-  epic_init();
+-  epic_main();
++  sicsetup();
+ 
++  {
++    epic_init();
++    epic_main();
++
++  }
++
 +  siccsrs();
    return epic_return();
  }
 diff -u -p a/sequential/statemate/statemate.c b/sequential/statemate/statemate.c
 --- a/sequential/statemate/statemate.c
 +++ b/sequential/statemate/statemate.c
-@@ -1269,10 +1269,12 @@ void _Pragma ( "entrypoint" ) statemate_
+@@ -1269,10 +1269,17 @@ void _Pragma ( "entrypoint" ) statemate_
  }
  
  
 +#include <siccsrs.h>
  int main ( void )
  {
-   statemate_init();
-   statemate_main();
- 
+-  statemate_init();
+-  statemate_main();
++  sicsetup();
+ 
++  {
++    statemate_init();
++    statemate_main();
++
++  }
++
 +  siccsrs();
    return statemate_return();
  }
 diff -u -p a/kernel/md5/md5.c b/kernel/md5/md5.c
 --- a/kernel/md5/md5.c
 +++ b/kernel/md5/md5.c
-@@ -622,11 +622,13 @@ void _Pragma( "entrypoint" ) md5_main( v
+@@ -622,11 +622,18 @@ void _Pragma( "entrypoint" ) md5_main( v
    md5_bytesNeeded = randomStruct.bytesNeeded + randomStruct2.bytesNeeded;
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   md5_init();
-   md5_main();
+-  md5_init();
+-  md5_main();
++  sicsetup();
++
++  {
++    md5_init();
++    md5_main();
    // printf("%d\n", ret);
++  }
++
 +  siccsrs();
    return md5_return();
  }
@@ -374,7 +536,7 @@ diff -u -p a/kernel/md5/md5.c b/kernel/md5/md5.c
 diff -u -p a/kernel/bsort/bsort.c b/kernel/bsort/bsort.c
 --- a/kernel/bsort/bsort.c
 +++ b/kernel/bsort/bsort.c
-@@ -119,6 +119,7 @@ void _Pragma( "entrypoint" ) bsort_main(
+@@ -119,14 +119,21 @@ void _Pragma( "entrypoint" ) bsort_main(
  }
  
  
@@ -382,41 +544,64 @@ diff -u -p a/kernel/bsort/bsort.c b/kernel/bsort/bsort.c
  /*
    Main function
  */
-@@ -128,5 +129,6 @@ int main( void )
-   bsort_init();
-   bsort_main();
  
+ int main( void )
+ {
+-  bsort_init();
+-  bsort_main();
++  sicsetup();
+ 
++  {
++    bsort_init();
++    bsort_main();
++
++  }
++
 +  siccsrs();
    return bsort_return();
  }
 diff -u -p a/kernel/ludcmp/ludcmp.c b/kernel/ludcmp/ludcmp.c
 --- a/kernel/ludcmp/ludcmp.c
 +++ b/kernel/ludcmp/ludcmp.c
-@@ -168,10 +168,12 @@ void _Pragma( "entrypoint" ) ludcmp_main
+@@ -168,10 +168,17 @@ void _Pragma( "entrypoint" ) ludcmp_main
    ludcmp_chkerr = ludcmp_test( n, eps );
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   ludcmp_init();
-   ludcmp_main();
- 
+-  ludcmp_init();
+-  ludcmp_main();
++  sicsetup();
+ 
++  {
++    ludcmp_init();
++    ludcmp_main();
++
++  }
++
 +  siccsrs();
    return ( ludcmp_return() );
  }
 diff -u -p a/kernel/isqrt/isqrt.c b/kernel/isqrt/isqrt.c
 --- a/kernel/isqrt/isqrt.c
 +++ b/kernel/isqrt/isqrt.c
-@@ -147,10 +147,12 @@ void _Pragma( "entrypoint" ) isqrt_main(
+@@ -147,10 +147,17 @@ void _Pragma( "entrypoint" ) isqrt_main(
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   isqrt_init();
-   isqrt_main();
+-  isqrt_init();
+-  isqrt_main();
++  sicsetup();
++
++  {
++    isqrt_init();
++    isqrt_main();
++  }
++
 +  siccsrs();
    return isqrt_return();
  }
@@ -424,7 +609,7 @@ diff -u -p a/kernel/isqrt/isqrt.c b/kernel/isqrt/isqrt.c
 diff -u -p a/kernel/pm/pm.c b/kernel/pm/pm.c
 --- a/kernel/pm/pm.c
 +++ b/kernel/pm/pm.c
-@@ -730,6 +730,7 @@ int pm_kernel( pm_data_t *pmdata )
+@@ -730,14 +730,21 @@ int pm_kernel( pm_data_t *pmdata )
  }
  
  
@@ -432,58 +617,88 @@ diff -u -p a/kernel/pm/pm.c b/kernel/pm/pm.c
  /*
    Main function
  */
-@@ -739,5 +740,6 @@ int main( void )
-   pm_init();
-   pm_main();
  
+ int main( void )
+ {
+-  pm_init();
+-  pm_main();
++  sicsetup();
+ 
++  {
++    pm_init();
++    pm_main();
++
++  }
++
 +  siccsrs();
    return pm_return();
  }
 diff -u -p a/kernel/countnegative/countnegative.c b/kernel/countnegative/countnegative.c
 --- a/kernel/countnegative/countnegative.c
 +++ b/kernel/countnegative/countnegative.c
-@@ -131,10 +131,12 @@ void _Pragma( "entrypoint" ) countnegati
+@@ -131,10 +131,17 @@ void _Pragma( "entrypoint" ) countnegati
    countnegative_sum(  countnegative_array );
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   countnegative_init();
-   countnegative_main();
- 
+-  countnegative_init();
+-  countnegative_main();
++  sicsetup();
+ 
++  {
++    countnegative_init();
++    countnegative_main();
++
++  }
++
 +  siccsrs();
    return ( countnegative_return() );
  }
 diff -u -p a/kernel/fft/fft.c b/kernel/fft/fft.c
 --- a/kernel/fft/fft.c
 +++ b/kernel/fft/fft.c
-@@ -323,11 +323,13 @@ void _Pragma( "entrypoint" ) fft_main( v
+@@ -323,11 +323,18 @@ void _Pragma( "entrypoint" ) fft_main( v
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   fft_init();
+-  fft_init();
++  sicsetup();
  
-   fft_main();
+-  fft_main();
++  {
++    fft_init();
  
++    fft_main();
++
++  }
++
 +  siccsrs();
    return fft_return();
  }
 diff -u -p a/kernel/cosf/cosf.c b/kernel/cosf/cosf.c
 --- a/kernel/cosf/cosf.c
 +++ b/kernel/cosf/cosf.c
-@@ -77,10 +77,12 @@ void _Pragma( "entrypoint" ) cosf_main(
+@@ -77,10 +77,17 @@ void _Pragma( "entrypoint" ) cosf_main(
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   cosf_init();
-   cosf_main();
+-  cosf_init();
+-  cosf_main();
++  sicsetup();
++
++  {
++    cosf_init();
++    cosf_main();
++  }
++
 +  siccsrs();
    return cosf_return();
  }
@@ -491,30 +706,44 @@ diff -u -p a/kernel/cosf/cosf.c b/kernel/cosf/cosf.c
 diff -u -p a/kernel/deg2rad/deg2rad.c b/kernel/deg2rad/deg2rad.c
 --- a/kernel/deg2rad/deg2rad.c
 +++ b/kernel/deg2rad/deg2rad.c
-@@ -82,9 +82,11 @@ void _Pragma( "entrypoint" ) deg2rad_mai
+@@ -82,9 +82,16 @@ void _Pragma( "entrypoint" ) deg2rad_mai
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   deg2rad_init();
-   deg2rad_main();
+-  deg2rad_init();
+-  deg2rad_main();
++  sicsetup();
++
++  {
++    deg2rad_init();
++    deg2rad_main();
++  }
++
 +  siccsrs();
    return deg2rad_return();
  }
 diff -u -p a/kernel/insertsort/insertsort.c b/kernel/insertsort/insertsort.c
 --- a/kernel/insertsort/insertsort.c
 +++ b/kernel/insertsort/insertsort.c
-@@ -130,10 +130,12 @@ void _Pragma( "entrypoint" ) insertsort_
+@@ -130,10 +130,17 @@ void _Pragma( "entrypoint" ) insertsort_
      insertsort_max_i = insertsort_iters_i;
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   insertsort_init();
-   insertsort_main();
+-  insertsort_init();
+-  insertsort_main();
++  sicsetup();
++
++  {
++    insertsort_init();
++    insertsort_main();
++  }
++
 +  siccsrs();
    return ( insertsort_return() );
  }
@@ -522,16 +751,23 @@ diff -u -p a/kernel/insertsort/insertsort.c b/kernel/insertsort/insertsort.c
 diff -u -p a/kernel/fac/fac.c b/kernel/fac/fac.c
 --- a/kernel/fac/fac.c
 +++ b/kernel/fac/fac.c
-@@ -87,11 +87,13 @@ void _Pragma( "entrypoint" ) fac_main ()
+@@ -87,11 +87,18 @@ void _Pragma( "entrypoint" ) fac_main ()
  }
  
  
 +#include <siccsrs.h>
  int main ( void )
  {
-   fac_init();
-   fac_main();
- 
+-  fac_init();
+-  fac_main();
++  sicsetup();
+ 
++  {
++    fac_init();
++    fac_main();
++
++  }
++
 +  siccsrs();
    return ( fac_return() );
  }
@@ -539,7 +775,7 @@ diff -u -p a/kernel/fac/fac.c b/kernel/fac/fac.c
 diff -u -p a/kernel/filterbank/filterbank.c b/kernel/filterbank/filterbank.c
 --- a/kernel/filterbank/filterbank.c
 +++ b/kernel/filterbank/filterbank.c
-@@ -157,6 +157,7 @@ void filterbank_core( float r[ 256 ],
+@@ -157,14 +157,21 @@ void filterbank_core( float r[ 256 ],
  }
  
  
@@ -547,57 +783,87 @@ diff -u -p a/kernel/filterbank/filterbank.c b/kernel/filterbank/filterbank.c
  /*
    Main function
  */
-@@ -166,5 +167,6 @@ int main( void )
-   filterbank_init();
-   filterbank_main();
  
+ int main( void )
+ {
+-  filterbank_init();
+-  filterbank_main();
++  sicsetup();
+ 
++  {
++    filterbank_init();
++    filterbank_main();
++
++  }
++
 +  siccsrs();
    return filterbank_return();
  }
 diff -u -p a/kernel/st/st.c b/kernel/st/st.c
 --- a/kernel/st/st.c
 +++ b/kernel/st/st.c
-@@ -217,10 +217,12 @@ void _Pragma( "entrypoint" ) st_main( vo
+@@ -217,10 +217,17 @@ void _Pragma( "entrypoint" ) st_main( vo
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   st_init();
-   st_main();
- 
+-  st_init();
+-  st_main();
++  sicsetup();
+ 
++  {
++    st_init();
++    st_main();
++
++  }
++
 +  siccsrs();
    return ( st_return() );
  }
 diff -u -p a/kernel/sha/sha.c b/kernel/sha/sha.c
 --- a/kernel/sha/sha.c
 +++ b/kernel/sha/sha.c
-@@ -211,9 +211,11 @@ int sha_return( void )
+@@ -211,9 +211,16 @@ int sha_return( void )
    return ( sum - 261944 != 0 );
  }
  
 +#include <siccsrs.h>
  int main ( void )
  {
-   sha_init();
-   sha_main();
+-  sha_init();
+-  sha_main();
++  sicsetup();
++
++  {
++    sha_init();
++    sha_main();
++  }
++
 +  siccsrs();
    return ( sha_return() );
  }
 diff -u -p a/kernel/fir2dim/fir2dim.c b/kernel/fir2dim/fir2dim.c
 --- a/kernel/fir2dim/fir2dim.c
 +++ b/kernel/fir2dim/fir2dim.c
-@@ -189,11 +189,13 @@ void _Pragma( "entrypoint" ) fir2dim_mai
+@@ -189,11 +189,18 @@ void _Pragma( "entrypoint" ) fir2dim_mai
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   fir2dim_init();
-   fir2dim_main();
- 
+-  fir2dim_init();
+-  fir2dim_main();
++  sicsetup();
+ 
++  {
++    fir2dim_init();
++    fir2dim_main();
++
++  }
++
 +  siccsrs();
    return ( fir2dim_return() );
  }
@@ -605,142 +871,205 @@ diff -u -p a/kernel/fir2dim/fir2dim.c b/kernel/fir2dim/fir2dim.c
 diff -u -p a/kernel/bitcount/bitcount.c b/kernel/bitcount/bitcount.c
 --- a/kernel/bitcount/bitcount.c
 +++ b/kernel/bitcount/bitcount.c
-@@ -137,10 +137,12 @@ void _Pragma( "entrypoint" ) bitcount_ma
+@@ -137,10 +137,17 @@ void _Pragma( "entrypoint" ) bitcount_ma
    _Pragma( "flowrestriction 1*btbl_bitcount <= 4*call_btbl" )
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   bitcount_init();
-   bitcount_main();
- 
+-  bitcount_init();
+-  bitcount_main();
++  sicsetup();
+ 
++  {
++    bitcount_init();
++    bitcount_main();
++
++  }
++
 +  siccsrs();
    return ( bitcount_return() );
  }
 diff -u -p a/kernel/bitonic/bitonic.c b/kernel/bitonic/bitonic.c
 --- a/kernel/bitonic/bitonic.c
 +++ b/kernel/bitonic/bitonic.c
-@@ -148,10 +148,12 @@ void _Pragma ( "entrypoint" ) bitonic_ma
+@@ -148,10 +148,17 @@ void _Pragma ( "entrypoint" ) bitonic_ma
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   bitonic_init();
-   bitonic_main();
- 
+-  bitonic_init();
+-  bitonic_main();
++  sicsetup();
+ 
++  {
++    bitonic_init();
++    bitonic_main();
++
++  }
++
 +  siccsrs();
    return ( bitonic_return() );
  }
 diff -u -p a/kernel/quicksort/quicksort.c b/kernel/quicksort/quicksort.c
 --- a/kernel/quicksort/quicksort.c
 +++ b/kernel/quicksort/quicksort.c
-@@ -236,10 +236,12 @@ void _Pragma ( "entrypoint" ) quicksort_
+@@ -236,10 +236,17 @@ void _Pragma ( "entrypoint" ) quicksort_
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   quicksort_init();
-   quicksort_main();
- 
+-  quicksort_init();
+-  quicksort_main();
++  sicsetup();
+ 
++  {
++    quicksort_init();
++    quicksort_main();
++
++  }
++
 +  siccsrs();
    return ( quicksort_return() - 1527923179 != 0 );
  }
 diff -u -p a/kernel/cubic/cubic.c b/kernel/cubic/cubic.c
 --- a/kernel/cubic/cubic.c
 +++ b/kernel/cubic/cubic.c
-@@ -148,9 +148,11 @@ void cubic_solveCubic( float a, float b,
+@@ -148,9 +148,16 @@ void cubic_solveCubic( float a, float b,
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   cubic_init();
-   cubic_main();
+-  cubic_init();
+-  cubic_main();
++  sicsetup();
++
++  {
++    cubic_init();
++    cubic_main();
++  }
++
 +  siccsrs();
    return cubic_return();
  }
 diff -u -p a/kernel/recursion/recursion.c b/kernel/recursion/recursion.c
 --- a/kernel/recursion/recursion.c
 +++ b/kernel/recursion/recursion.c
-@@ -64,9 +64,11 @@ void _Pragma( "entrypoint" ) recursion_m
+@@ -64,9 +64,16 @@ void _Pragma( "entrypoint" ) recursion_m
    recursion_result = recursion_fib( recursion_input );
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   recursion_init();
-   recursion_main();
+-  recursion_init();
+-  recursion_main();
++  sicsetup();
++
++  {
++    recursion_init();
++    recursion_main();
++  }
++
 +  siccsrs();
    return ( recursion_return() );
  }
 diff -u -p a/kernel/iir/iir.c b/kernel/iir/iir.c
 --- a/kernel/iir/iir.c
 +++ b/kernel/iir/iir.c
-@@ -154,10 +154,12 @@ void _Pragma( "entrypoint" ) iir_main( v
+@@ -154,10 +154,17 @@ void _Pragma( "entrypoint" ) iir_main( v
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   iir_init();
-   iir_main();
- 
+-  iir_init();
+-  iir_main();
++  sicsetup();
+ 
++  {
++    iir_init();
++    iir_main();
++
++  }
++
 +  siccsrs();
    return ( iir_return() - 400 != 0 );
  }
 diff -u -p a/kernel/jfdctint/jfdctint.c b/kernel/jfdctint/jfdctint.c
 --- a/kernel/jfdctint/jfdctint.c
 +++ b/kernel/jfdctint/jfdctint.c
-@@ -310,10 +310,12 @@ void _Pragma ( "entrypoint" ) jfdctint_m
+@@ -310,10 +310,17 @@ void _Pragma ( "entrypoint" ) jfdctint_m
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   jfdctint_init();
-   jfdctint_main();
- 
+-  jfdctint_init();
+-  jfdctint_main();
++  sicsetup();
+ 
++  {
++    jfdctint_init();
++    jfdctint_main();
++
++  }
++
 +  siccsrs();
    return ( jfdctint_return() );
  }
 diff -u -p a/kernel/binarysearch/binarysearch.c b/kernel/binarysearch/binarysearch.c
 --- a/kernel/binarysearch/binarysearch.c
 +++ b/kernel/binarysearch/binarysearch.c
-@@ -147,10 +147,12 @@ void _Pragma( "entrypoint" ) binarysearc
+@@ -147,10 +147,17 @@ void _Pragma( "entrypoint" ) binarysearc
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   binarysearch_init();
-   binarysearch_main();
- 
+-  binarysearch_init();
+-  binarysearch_main();
++  sicsetup();
+ 
++  {
++    binarysearch_init();
++    binarysearch_main();
++
++  }
++
 +  siccsrs();
    return ( binarysearch_return() - ( -1 ) != 0 );
  }
 diff -u -p a/kernel/minver/minver.c b/kernel/minver/minver.c
 --- a/kernel/minver/minver.c
 +++ b/kernel/minver/minver.c
-@@ -247,11 +247,13 @@ void _Pragma( "entrypoint" ) minver_main
+@@ -247,11 +247,18 @@ void _Pragma( "entrypoint" ) minver_main
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   minver_init();
-   minver_main();
- 
+-  minver_init();
+-  minver_main();
++  sicsetup();
+ 
++  {
++    minver_init();
++    minver_main();
++
++  }
++
 +  siccsrs();
    return ( minver_return() );
  }
@@ -748,32 +1077,46 @@ diff -u -p a/kernel/minver/minver.c b/kernel/minver/minver.c
 diff -u -p a/kernel/matrix1/matrix1.c b/kernel/matrix1/matrix1.c
 --- a/kernel/matrix1/matrix1.c
 +++ b/kernel/matrix1/matrix1.c
-@@ -160,10 +160,12 @@ void _Pragma ( "entrypoint" ) matrix1_ma
+@@ -160,10 +160,17 @@ void _Pragma ( "entrypoint" ) matrix1_ma
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   matrix1_init();
-   matrix1_main();
- 
+-  matrix1_init();
+-  matrix1_main();
++  sicsetup();
+ 
++  {
++    matrix1_init();
++    matrix1_main();
++
++  }
++
 +  siccsrs();
    return matrix1_return();
  }
 diff -u -p a/kernel/prime/prime.c b/kernel/prime/prime.c
 --- a/kernel/prime/prime.c
 +++ b/kernel/prime/prime.c
-@@ -128,11 +128,13 @@ void _Pragma( "entrypoint" ) prime_main(
+@@ -128,11 +128,18 @@ void _Pragma( "entrypoint" ) prime_main(
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   prime_init();
-   prime_main();
- 
+-  prime_init();
+-  prime_main();
++  sicsetup();
+ 
++  {
++    prime_init();
++    prime_main();
++
++  }
++
 +  siccsrs();
    return ( prime_return() ) ;
  }
@@ -781,32 +1124,46 @@ diff -u -p a/kernel/prime/prime.c b/kernel/prime/prime.c
 diff -u -p a/kernel/complex_updates/complex_updates.c b/kernel/complex_updates/complex_updates.c
 --- a/kernel/complex_updates/complex_updates.c
 +++ b/kernel/complex_updates/complex_updates.c
-@@ -126,11 +126,13 @@ void _Pragma( "entrypoint" ) complex_upd
+@@ -126,11 +126,18 @@ void _Pragma( "entrypoint" ) complex_upd
  
  }
  
 +#include <siccsrs.h>
  int main( void )
  {
-   complex_updates_init();
+-  complex_updates_init();
++  sicsetup();
  
-   complex_updates_main();
+-  complex_updates_main();
++  {
++    complex_updates_init();
  
++    complex_updates_main();
++
++  }
++
 +  siccsrs();
    return complex_updates_return();
  }
 diff -u -p a/kernel/rad2deg/rad2deg.c b/kernel/rad2deg/rad2deg.c
 --- a/kernel/rad2deg/rad2deg.c
 +++ b/kernel/rad2deg/rad2deg.c
-@@ -81,9 +81,11 @@ void _Pragma ( "entrypoint" ) rad2deg_ma
+@@ -81,9 +81,16 @@ void _Pragma ( "entrypoint" ) rad2deg_ma
  }
  
  
 +#include <siccsrs.h>
  int main( void )
  {
-   rad2deg_init();
-   rad2deg_main();
+-  rad2deg_init();
+-  rad2deg_main();
++  sicsetup();
++
++  {
++    rad2deg_init();
++    rad2deg_main();
++  }
++
 +  siccsrs();
    return rad2deg_return();
  }
diff --git a/bench/sic/siccsrs.c b/bench/sic/siccsrs.c
index c19b131a54a127c20b3ba0696059813e91bc7f95..f64f1a82735cf435638e494e4696f011bd8ceb15 100644
--- a/bench/sic/siccsrs.c
+++ b/bench/sic/siccsrs.c
@@ -15,17 +15,33 @@ static inline void print_uint(const char *msg, uint32_t val) {
     fputs(buffer, stdout);
 }
 
+static uint32_t base_time;
+static uint32_t base_committed;
+
+void sicsetup(void) {
+    READCSR(base_time, 0xB00);
+    READCSR(base_committed, 0xB02);
+}
+
 void siccsrs(void) {
-    uint32_t brpending, mempending, lsu, imiss;
+    uint32_t brpending, mempending, lsu, imiss, imisscnt, mtotaltime, committed;
 
     READCSR(brpending, 0xB11);
     READCSR(mempending, 0xB12);
     READCSR(lsu, 0xB13);
     READCSR(imiss, 0xB14);
+    READCSR(imisscnt, 0xB03);
+    READCSR(mtotaltime, 0xB00);
+    READCSR(committed, 0xB02);
 
     print_uint("brpending: ", brpending);
     print_uint("; mempending: ", mempending);
     print_uint("; lsu: ", lsu);
     print_uint("; imiss: ", imiss);
-    puts("");
+    print_uint("; imisscnt: ", imisscnt);
+    print_uint("; total time: ", mtotaltime);
+    print_uint("; base time: ", base_time);
+    print_uint("; total committed: ", committed);
+    print_uint("; base committed: ", base_committed);
+    puts("\a");
 }
diff --git a/bench/sic/siccsrs.h b/bench/sic/siccsrs.h
index 8a704b78d7b3ec9646d05ef1d8975bc64e7a9584..57e60668f30931ba2a30a7b3e4fce03bdb0fa04a 100644
--- a/bench/sic/siccsrs.h
+++ b/bench/sic/siccsrs.h
@@ -1,6 +1,7 @@
 #ifndef __SICCSRS_H_
-#define __SICCSRS_H_
+# define __SICCSRS_H_
 
+void sicsetup(void);
 void siccsrs(void);
 
 #endif  /* __SICCSRS_H_ */