tweak(xod-arduino): if no one uses pin’s dirtyness state, do not store it

This commit is contained in:
Evgeny Kochetkov
2020-02-04 17:58:56 +03:00
parent 37901f08ba
commit 0880f41e25
9 changed files with 74 additions and 93 deletions

View File

@@ -26,7 +26,7 @@ struct TransactionState {
{{#unless patch.isConstant}}
bool node_{{id}}_isNodeDirty : 1;
{{#each outputs}}
{{#if (isOutputLinked this)}}
{{#if (shouldOutputStoreDirtyness this)}}
bool node_{{ ../id }}_isOutputDirty_{{ pinKey }} : 1;
{{/if}}
{{/each}}
@@ -40,7 +40,7 @@ struct TransactionState {
{{#unless patch.isConstant}}
node_{{id}}_isNodeDirty = true;
{{#eachDirtyablePin outputs}}
{{#if (isOutputLinked this)}}
{{#if (shouldOutputStoreDirtyness this)}}
node_{{ ../id }}_isOutputDirty_{{ pinKey }} = {{ isDirtyOnBoot }};
{{/if}}
{{/eachDirtyablePin}}
@@ -192,7 +192,7 @@ void handleDefers() {
// transfer possibly modified dirtiness state from context to g_transaction
{{#eachDirtyablePin outputs}}
{{#if (isOutputLinked this)}}
{{#if (shouldOutputStoreDirtyness this)}}
g_transaction.node_{{ ../id }}_isOutputDirty_{{ pinKey }} = ctxObj._isOutputDirty_{{ pinKey }};
{{/if}}
{{/eachDirtyablePin}}
@@ -407,7 +407,7 @@ void runTransaction() {
// transfer possibly modified dirtiness state from context to g_transaction
{{#eachDirtyablePin outputs}}
{{#if (isOutputLinked this)}}
{{#if (shouldOutputStoreDirtyness this)}}
g_transaction.node_{{ ../id }}_isOutputDirty_{{ pinKey }} = ctxObj._isOutputDirty_{{ pinKey }};
{{/if}}
{{/eachDirtyablePin}}

View File

@@ -263,7 +263,13 @@ Handlebars.registerHelper(
const isOutputLinked = R.pipe(R.pathOr(0, ['to', 'length']));
Handlebars.registerHelper('isOutputLinked', isOutputLinked);
Handlebars.registerHelper(
'shouldOutputStoreDirtyness',
R.both(
isOutputLinked,
R.propSatisfies(R.any(R.prop('doesAffectDirtyness')), 'to')
)
);
const isLinkedTweakNode = R.both(
R.pipe(R.path(['patch', 'patchPath']), XP.isTweakPath),

View File

@@ -57,5 +57,5 @@ Data:$3
fi
}
test_size "blink" " 1546 bytes (4.7% Full)" " 30 bytes (1.5% Full)"
test_size "big-patch" " 25070 bytes (76.5% Full)" " 998 bytes (48.7% Full)"
test_size "blink" " 1526 bytes (4.7% Full)" " 30 bytes (1.5% Full)"
test_size "big-patch" " 25172 bytes (76.8% Full)" " 997 bytes (48.7% Full)"

View File

@@ -5509,7 +5509,6 @@ struct TransactionState {
bool node_84_isNodeDirty : 1;
bool node_84_isOutputDirty_OUT : 1;
bool node_85_isNodeDirty : 1;
bool node_85_isOutputDirty_DEV : 1;
bool node_86_isNodeDirty : 1;
bool node_86_isOutputDirty_OUT : 1;
bool node_87_isNodeDirty : 1;
@@ -5591,7 +5590,6 @@ struct TransactionState {
bool node_123_isOutputDirty_DONE : 1;
bool node_123_hasUpstreamError : 1;
bool node_124_isNodeDirty : 1;
bool node_124_isOutputDirty_OUT : 1;
bool node_125_isNodeDirty : 1;
bool node_125_isOutputDirty_OUT : 1;
bool node_126_isNodeDirty : 1;
@@ -5627,7 +5625,6 @@ struct TransactionState {
bool node_140_isNodeDirty : 1;
bool node_140_isOutputDirty_OUT : 1;
bool node_141_isNodeDirty : 1;
bool node_141_isOutputDirty_R : 1;
bool node_141_hasUpstreamError : 1;
bool node_142_isNodeDirty : 1;
bool node_142_isOutputDirty_TICK : 1;
@@ -5659,10 +5656,8 @@ struct TransactionState {
bool node_154_isNodeDirty : 1;
bool node_154_isOutputDirty_R : 1;
bool node_155_isNodeDirty : 1;
bool node_155_isOutputDirty_R : 1;
bool node_155_hasUpstreamError : 1;
bool node_156_isNodeDirty : 1;
bool node_156_isOutputDirty_OUT : 1;
bool node_156_hasUpstreamError : 1;
bool node_157_isNodeDirty : 1;
bool node_157_isOutputDirty_MEM : 1;
@@ -5688,7 +5683,6 @@ struct TransactionState {
bool node_165_isOutputDirty_OUT : 1;
bool node_166_isNodeDirty : 1;
bool node_167_isNodeDirty : 1;
bool node_167_isOutputDirty_OUT : 1;
bool node_168_isNodeDirty : 1;
bool node_168_isOutputDirty_OUT : 1;
bool node_169_isNodeDirty : 1;
@@ -5708,7 +5702,6 @@ struct TransactionState {
bool node_175_isNodeDirty : 1;
bool node_175_isOutputDirty_OUT : 1;
bool node_176_isNodeDirty : 1;
bool node_176_isOutputDirty_OUT : 1;
bool node_177_isNodeDirty : 1;
bool node_177_isOutputDirty_OUT : 1;
bool node_178_isNodeDirty : 1;
@@ -5794,7 +5787,6 @@ struct TransactionState {
node_83_isOutputDirty_DEV = true;
node_84_isNodeDirty = true;
node_85_isNodeDirty = true;
node_85_isOutputDirty_DEV = true;
node_86_isNodeDirty = true;
node_86_isOutputDirty_OUT = false;
node_87_isNodeDirty = true;
@@ -6881,7 +6873,6 @@ void runTransaction() {
xod_dev__servo__servo_device::evaluate(&ctxObj);
// transfer possibly modified dirtiness state from context to g_transaction
g_transaction.node_85_isOutputDirty_DEV = ctxObj._isOutputDirty_DEV;
if (previousErrors.flags != node_85.errors.flags) {
detail::printErrorToDebugSerial(85, node_85.errors.flags);

View File

@@ -1396,7 +1396,6 @@ struct TransactionState {
bool node_4_isNodeDirty : 1;
bool node_4_isOutputDirty_TICK : 1;
bool node_5_isNodeDirty : 1;
bool node_5_isOutputDirty_MEM : 1;
bool node_6_isNodeDirty : 1;
TransactionState() {
node_3_isNodeDirty = true;
@@ -1404,7 +1403,6 @@ struct TransactionState {
node_4_isNodeDirty = true;
node_4_isOutputDirty_TICK = false;
node_5_isNodeDirty = true;
node_5_isOutputDirty_MEM = true;
node_6_isNodeDirty = true;
}
};
@@ -1546,7 +1544,6 @@ void runTransaction() {
xod__core__flip_flop::evaluate(&ctxObj);
// transfer possibly modified dirtiness state from context to g_transaction
g_transaction.node_5_isOutputDirty_MEM = ctxObj._isOutputDirty_MEM;
// mark downstream nodes dirty
}

View File

@@ -2,18 +2,18 @@
:100010000C947A000C947A000C947A000C947A0078
:100020000C947A000C947A000C947A000C947A0068
:100030000C947A000C947A000C947A000C947A0058
:100040000C9438020C947A000C947A000C947A0088
:100040000C942C020C947A000C947A000C947A0094
:100050000C947A000C947A000C947A000C947A0038
:100060000C947A000C947A00000000080002010051
:100070000003040700000000000000000000000072
:10008000250028002B0000000000240027002A0083
:10009000040404040404040402020202020203032E
:1000A0000303030301020408102040800102040836
:1000B0001020010204081020F70211241FBECFEF08
:1000B0001020010204081020EB0211241FBECFEF14
:1000C000D8E0DEBFCDBF21E0A0E0B1E001C01D92CD
:1000D000AE31B207E1F710E0CDE5D0E004C02197E2
:1000E000FE010E94FF02CC35D107C9F70E948202AF
:1000F0000C9405030C9400003FB7F89480911A010A
:1000E000FE010E94F302CC35D107C9F70E947602C7
:1000F0000C94F9020C9400003FB7F89480911A0117
:1001000090911B01A0911C01B0911D0126B5A89BE7
:1001100005C02F3F19F00196A11DB11D3FBFBA2F99
:10012000A92F982F8827820F911DA11DB11DBC01F9
@@ -33,66 +33,65 @@
:10020000DC2FD170D82BD0FBC0F9C093130182E052
:1002100091E00E94AF00C2FB992790F9892B80FBE7
:10022000C2F9C0931301DD2361F080920A0190921C
:100230000B01A0920C01B0920D01C260C064C0938A
:100230000B01A0920C01B0920D01C260C062C0938C
:100240001301882391F1C0911401750164018AEFB3
:10025000C80ED11CE11CF11C82E091E00E94AF00AD
:100260008111CFC090E0CC23A1F0409106015091C4
:100260008111C3C090E0CC23A1F0409106015091D0
:1002700007016091080170910901481559056A0547
:100280007B0508F4D0C0C416D506E606F70608F4C8
:10029000CAC08091130190FB83F984FB222720F9C7
:100280007B0508F4C4C0C416D506E606F70608F4D4
:10029000BEC08091130190FB83F984FB222720F9D3
:1002A000922B90FB84F9809313018091130184FFBA
:1002B00013C083FF0AC09091000181E0892798173D
:1002C00021F08093000181E001C080E09091130152
:1002D00080FB95F9909313018091130186FF67C00D
:1002E0006091000181FF63C041EB50E0FA0174911D
:1002F0008DE990E0FC012491222399F030E0220F57
:10030000331FF901EA57FF4FA591B491F901E45861
:10031000FF4F259134913FB7F8942C91272B2C93C4
:100320003FBFE5E7F0E02491FA014491FC0194918C
:10033000992309F43CC0222339F1233091F038F499
:100340002130A9F0223001F584B58F7D12C027300D
:1003500091F02830A1F02430B9F4809180008F7D95
:1003600003C0809180008F77809380000DC084B59A
:100370008F7784BD09C08091B0008F7703C08091D2
:10038000B0008F7D8093B000E92FF0E0EE0FFF1FEB
:10039000E458FF4FA591B4919FB7F8948C916111E7
:1003A00003C04095482301C0482B4C939FBF109237
:1003B000130180910A0190910B01A0910C01B09161
:1003C0000D010097A105B10569F040910F01509111
:1003D0001001609111017091120184179507A60711
:1003E000B70790F182E091E00E94AF008823A9F165
:1003F0001092020110920301109204011092050163
:100400002CC0C0920601D0920701E0920801F09240
:100410000901C0920201D0920301E0920401F0921E
:10042000050191E020CFC0920601D0920701E09231
:100430000801F0920901C0920201D0920301E092FA
:100440000401F092050125CF10920A0110920B01D0
:1004500010920C0110920D01C5CFDF91CF91FF904A
:10046000EF90DF90CF90BF90AF909F908F900895C6
:100470001F920F920FB60F9211242F933F938F93D9
:100480009F93AF93BF938091160190911701A09114
:100490001801B09119013091150123E0230F2D3778
:1004A00020F40196A11DB11D05C026E8230F029678
:1004B000A11DB11D20931501809316019093170182
:1004C000A0931801B093190180911A0190911B011A
:1004D000A0911C01B0911D010196A11DB11D809339
:1004E0001A0190931B01A0931C01B0931D01BF91B1
:1004F000AF919F918F913F912F910F900FBE0F90D1
:100500001F901895789484B5826084BD84B581600D
:1005100084BD85B5826085BD85B5816085BD8091CE
:100520006E00816080936E00109281008091810046
:10053000826080938100809181008160809381003E
:10054000809180008160809380008091B100846000
:100550008093B1008091B00081608093B000809161
:100560007A00846080937A0080917A008260809320
:100570007A0080917A00816080937A0080917A007D
:10058000806880937A001092C1000E947C004B0129
:100590005C0184E6C82ED12CE12CF12C0E947C0059
:1005A000DC01CB0188199909AA09BB09883E93404F
:1005B000A105B10598F321E0C21AD108E108F108BC
:1005C00088EE880E83E0981EA11CB11CC114D104D2
:1005D000E104F10419F781E0809314010E94CD0039
:1005E000109214010E94CD000E94A100FBCF8091C7
:1005F0001301807F85638064809313010895EE0F5B
:0E060000FF1F0590F491E02D0994F894FFCFB0
:1002B00009C083FF07C02091000191E09227291314
:1002C0009093000185FF67C06091000181FF63C0CA
:1002D00041EB50E0FA0174918DE990E0FC0124912A
:1002E000222399F030E0220F331FF901EA57FF4F24
:1002F000A591B491F901E458FF4F259134913FB78E
:10030000F8942C91272B2C933FBFE5E7F0E0249144
:10031000FA014491FC019491992309F43CC02223F1
:1003200039F1233091F038F42130A9F0223001F571
:1003300084B58F7D12C0273091F02830A1F0243091
:10034000B9F4809180008F7D03C0809180008F7709
:10035000809380000DC084B58F7784BD09C08091E3
:10036000B0008F7703C08091B0008F7D8093B00084
:10037000E92FF0E0EE0FFF1FE458FF4FA591B49175
:100380009FB7F8948C91611103C04095482301C038
:10039000482B4C939FBF1092130180910A019091BA
:1003A0000B01A0910C01B0910D010097A105B105C1
:1003B00069F040910F01509110016091110170910D
:1003C000120184179507A607B70790F182E091E024
:1003D0000E94AF008823A9F110920201109203013C
:1003E00010920401109205012CC0C0920601D09217
:1003F0000701E0920801F0920901C0920201D09237
:100400000301E0920401F092050191E02CCFC0922B
:100410000601D0920701E0920801F0920901C09212
:100420000201D0920301E0920401F092050131CF64
:1004300010920A0110920B0110920C0110920D0102
:10044000C5CFDF91CF91FF90EF90DF90CF90BF901D
:10045000AF909F908F9008951F920F920FB60F92BA
:1004600011242F933F938F939F93AF93BF938091CA
:10047000160190911701A0911801B09119013091C6
:10048000150123E0230F2D3720F40196A11DB11D86
:1004900005C026E8230F0296A11DB11D209315016A
:1004A0008093160190931701A0931801B09319013E
:1004B00080911A0190911B01A0911C01B0911D0126
:1004C0000196A11DB11D80931A0190931B01A09369
:1004D0001C01B0931D01BF91AF919F918F913F91EE
:1004E0002F910F900FBE0F901F901895789484B5A0
:1004F000826084BD84B5816084BD85B5826085BD20
:1005000085B5816085BD80916E00816080936E00AD
:10051000109281008091810082608093810080919F
:100520008100816080938100809180008160809350
:1005300080008091B10084608093B1008091B00010
:1005400081608093B00080917A00846080937A000B
:1005500080917A00826080937A0080917A00816035
:1005600080937A0080917A00806880937A0010925C
:10057000C1000E947C004B015C0184E6C82ED12C96
:10058000E12CF12C0E947C00DC01CB018819990937
:10059000AA09BB09883E9340A105B10598F321E063
:1005A000C21AD108E108F10888EE880E83E0981E8F
:1005B000A11CB11CC114D104E104F10419F781E0BC
:1005C000809314010E94CD00109214010E94CD006E
:1005D0000E94A100FBCF80911301807F8561806222
:1005E000809313010895EE0FFF1F0590F491E02D05
:0605F0000994F894FFCF0E
:00000001FF

View File

@@ -2311,10 +2311,8 @@ struct TransactionState {
bool node_20_isOutputDirty_OUT : 1;
bool node_20_hasUpstreamError : 1;
bool node_21_isNodeDirty : 1;
bool node_21_isOutputDirty_OUT : 1;
bool node_21_hasUpstreamError : 1;
bool node_22_isNodeDirty : 1;
bool node_22_isOutputDirty_OUT : 1;
bool node_22_hasUpstreamError : 1;
bool node_23_isNodeDirty : 1;
bool node_23_hasUpstreamError : 1;

View File

@@ -1439,7 +1439,6 @@ struct TransactionState {
bool node_8_isNodeDirty : 1;
bool node_8_isOutputDirty_TIME : 1;
bool node_9_isNodeDirty : 1;
bool node_9_isOutputDirty_OUT : 1;
bool node_10_isNodeDirty : 1;
TransactionState() {
node_7_isNodeDirty = true;

View File

@@ -1487,29 +1487,23 @@ struct TransactionState {
bool node_3_isNodeDirty : 1;
bool node_3_isOutputDirty_TICK : 1;
bool node_4_isNodeDirty : 1;
bool node_4_isOutputDirty_SIG : 1;
bool node_5_isNodeDirty : 1;
bool node_5_isOutputDirty_SIG : 1;
bool node_6_isNodeDirty : 1;
bool node_6_isOutputDirty_F : 1;
bool node_7_isNodeDirty : 1;
bool node_7_isOutputDirty_F : 1;
bool node_8_isNodeDirty : 1;
bool node_8_isOutputDirty_MEM : 1;
bool node_9_isNodeDirty : 1;
TransactionState() {
node_3_isNodeDirty = true;
node_3_isOutputDirty_TICK = false;
node_4_isNodeDirty = true;
node_4_isOutputDirty_SIG = true;
node_5_isNodeDirty = true;
node_5_isOutputDirty_SIG = true;
node_6_isNodeDirty = true;
node_6_isOutputDirty_F = false;
node_7_isNodeDirty = true;
node_7_isOutputDirty_F = false;
node_8_isNodeDirty = true;
node_8_isOutputDirty_MEM = true;
node_9_isNodeDirty = true;
}
};
@@ -1635,7 +1629,6 @@ void runTransaction() {
xod__gpio__digital_read::evaluateTmpl<node_0_output_VAL>(&ctxObj);
// transfer possibly modified dirtiness state from context to g_transaction
g_transaction.node_4_isOutputDirty_SIG = ctxObj._isOutputDirty_SIG;
// mark downstream nodes dirty
}
@@ -1662,7 +1655,6 @@ void runTransaction() {
xod__gpio__digital_read::evaluateTmpl<node_1_output_VAL>(&ctxObj);
// transfer possibly modified dirtiness state from context to g_transaction
g_transaction.node_5_isOutputDirty_SIG = ctxObj._isOutputDirty_SIG;
// mark downstream nodes dirty
}
@@ -1745,7 +1737,6 @@ void runTransaction() {
xod__core__flip_flop::evaluate(&ctxObj);
// transfer possibly modified dirtiness state from context to g_transaction
g_transaction.node_8_isOutputDirty_MEM = ctxObj._isOutputDirty_MEM;
// mark downstream nodes dirty
}