performance enhancements to Startup...
diff --git a/packages/xdc/runtime/Startup.c b/packages/xdc/runtime/Startup.c
index 2f7207a..db9b917 100644
--- a/packages/xdc/runtime/Startup.c
+++ b/packages/xdc/runtime/Startup.c
@@ -30,14 +30,14 @@
module->execFlag = TRUE;
- for (i = 0; i < Startup_firstFxns.length; i++) {
- Startup_firstFxns.elem[i]();
+ for (i = 0; i < Startup_firstFxnsLen; i++) {
+ Startup_firstFxns[i]();
}
(Startup_execImpl)();
- for (i = 0; i < Startup_lastFxns.length; i++) {
- Startup_lastFxns.elem[i]();
+ for (i = 0; i < Startup_lastFxnsLen; i++) {
+ Startup_lastFxns[i]();
}
}
diff --git a/packages/xdc/runtime/Startup.xdc b/packages/xdc/runtime/Startup.xdc
index ed89203..e0eb72b 100644
--- a/packages/xdc/runtime/Startup.xdc
+++ b/packages/xdc/runtime/Startup.xdc
@@ -131,14 +131,14 @@
* List of functions called before module startup
*
*/
- config InitFxn firstFxns[length] = [];
+ config InitFxn firstFxns[] = [];
/*!
* ======== lastFxns ========
* List of functions called after module startup
*
*/
- config InitFxn lastFxns[length] = [];
+ config InitFxn lastFxns[] = [];
/*!
* ======== resetFxn ========
@@ -217,6 +217,9 @@
*/
config Bool sfxnRts[];
+ config Int firstFxnsLen;
+ config Int lastFxnsLen;
+
struct Module_State {
Int *stateTab; /* initially null */
Bool execFlag; /* if true, startup code processing started */
diff --git a/packages/xdc/runtime/Startup.xs b/packages/xdc/runtime/Startup.xs
index d6da56d..04aea36 100644
--- a/packages/xdc/runtime/Startup.xs
+++ b/packages/xdc/runtime/Startup.xs
@@ -24,6 +24,9 @@
*/
function module$static$init(obj, params)
{
+ this.firstFxnsLen = this.firstFxns.length;
+ this.lastFxnsLen = this.lastFxns.length;
+
obj.stateTab = null;
obj.execFlag = false;
obj.rtsDoneFlag = false;