### Author Topic: The Optimization Compilation  (Read 90354 times)

0 Members and 1 Guest are viewing this topic.

#### Happybobjr

• James Oldiges
• LV11 Super Veteran (Next: 3000)
• Posts: 2325
• Rating: +128/-20
• Howdy :)
##### Re: The Optimization Compilation
« Reply #45 on: January 20, 2011, 03:04:42 pm »
thank you very much
School: East Central High School

Axe: １.０.0
TI-84 +SE  ||| OS: 2.53 MP (patched) ||| Version: "M"
TI-Nspire    |||  Lent out, and never returned
____________________________________________________________

#### Munchor

• LV13 Extreme Addict (Next: 9001)
• Posts: 6199
• Rating: +295/-121
• Code Recycler
##### Re: The Optimization Compilation
« Reply #46 on: January 21, 2011, 07:58:31 pm »
Code: [Select]
While IDisp "OEnd
Will While I work as If I? If yes, is it faster than While I = 1?

#### Happybobjr

• James Oldiges
• LV11 Super Veteran (Next: 3000)
• Posts: 2325
• Rating: +128/-20
• Howdy :)
##### Re: The Optimization Compilation
« Reply #47 on: January 21, 2011, 08:01:44 pm »
the code will create an endless loop.
that is faster than While I=1
School: East Central High School

Axe: １.０.0
TI-84 +SE  ||| OS: 2.53 MP (patched) ||| Version: "M"
TI-Nspire    |||  Lent out, and never returned
____________________________________________________________

#### rizoom

• LV1 Newcomer (Next: 20)
• Posts: 11
• Rating: +1/-0
##### Re: The Optimization Compilation
« Reply #48 on: January 24, 2011, 11:56:11 am »
And of course, instead of doing
Code: [Select]
:If EXP:1->A:End
or

Code: [Select]
:If EXP:->A:End
But this is much quicker AND smaller (saves 5 bytes)

Code: [Select]
:EXP->A
« Last Edit: January 24, 2011, 11:57:30 am by rizoom »

#### Builderboy

• Physics Guru
• CoT Emeritus
• LV13 Extreme Addict (Next: 9001)
• Posts: 5673
• Rating: +613/-9
• Would you kindly?
##### Re: The Optimization Compilation
« Reply #49 on: January 24, 2011, 12:08:32 pm »
Unfortunately those are not equivalent pieces of code.  In the first two examples, a 1 is stored to A upon a true expression, and it remains the same under a false expression.  In the last, it is 1 when its true and 0 when its false.

#### rizoom

• LV1 Newcomer (Next: 20)
• Posts: 11
• Rating: +1/-0
##### Re: The Optimization Compilation
« Reply #50 on: January 24, 2011, 12:13:13 pm »
Oh yes, sorry!

#### Builderboy

• Physics Guru
• CoT Emeritus
• LV13 Extreme Addict (Next: 9001)
• Posts: 5673
• Rating: +613/-9
• Would you kindly?
##### Re: The Optimization Compilation
« Reply #51 on: January 24, 2011, 12:14:06 pm »
Hey thats ok Sometimes this optimization works even if there is a difference ^^

Welcome to Omnimaga too!  It's nice to see another Axe user around here Why don't you make a post in the Introduce Yourself page so we can all give you a proper hearty welcome
« Last Edit: January 24, 2011, 12:15:53 pm by Builderboy »

#### Happybobjr

• James Oldiges
• LV11 Super Veteran (Next: 3000)
• Posts: 2325
• Rating: +128/-20
• Howdy :)
##### Re: The Optimization Compilation
« Reply #52 on: January 24, 2011, 07:40:34 pm »
Hey thats ok Sometimes this optimization works even if there is a difference ^^

Welcome to Omnimaga too!  It's nice to see another Axe user around here Why don't you make a post in the Introduce Yourself page so we can all give you a proper peanut filled welcome
fixed

Question mark!
0-A->B->C->D.....->Z->0

to

0->{l1-56}
fill(l1-56,56)
School: East Central High School

Axe: １.０.0
TI-84 +SE  ||| OS: 2.53 MP (patched) ||| Version: "M"
TI-Nspire    |||  Lent out, and never returned
____________________________________________________________

#### ztrumpet

• The Rarely Active One
• CoT Emeritus
• LV13 Extreme Addict (Next: 9001)
• Posts: 5712
• Rating: +364/-4
• If you see this, send me a PM. Just for fun.
##### Re: The Optimization Compilation
« Reply #53 on: January 24, 2011, 08:30:46 pm »
Question mark!
0-A->B->C->D.....->Z->0

to

0->{l1-56}
fill(l1-56,56)
0->{oA}
Fill(oA,56)

This takes into account the moving of variables.
« Last Edit: January 24, 2011, 08:30:58 pm by ztrumpet »
If I'm wrong, please correct me!
Unfinished Projects:
 Elmgon 14% Basic Movement Demo Homescreen Game Pack 80% Basic Latest Release Cube Droid Saves the Galaxy 65% Axe Demo Detonate 70% Axe
Completed Projects:
Exodus | Midnight |Drifter | Axe Snake | Jump! | Factory Theta | Spider | Plot Drop | Papi Jump | Numb3rs | Nibbler | Boost | Duel Tile Map Editor | Homescreen Map Editor | Key Group Check | Oasis

#### Runer112

• Project Author
• LV11 Super Veteran (Next: 3000)
• Posts: 2289
• Rating: +639/-31
##### Re: The Optimization Compilation
« Reply #54 on: January 24, 2011, 09:15:05 pm »
If you only need to initialize five or fewer 2-byte values like variables, it is best to initialize them without any special commands. With this method, you can also avoid changing the values of any memory locations that you don't want to initialize between values you do want to initialize.

Code: (18 bytes) [Select]
0→A→B→X→Y→{L₁}ʳ

However, if you need to initialize more than five values, it is best to use the Fill() method, like you suggested for zeroing out every variable. However, a few slight changes:
• Storing 2 bytes to a constant address (e.g. °A) is more optimized than storing 1 byte.
• Because of the above modification and the first two bytes now being equal to 0, the start address for Fill() can be increased by 1 (e.g. °A+1) to save some clock cycles by reducing the total number of bytes needed to be filled by 1.
• There are only 27 variables, for a total of 54 bytes. Subtracting 1 for the above reason and 1 more due to the fact that the size argument of Fill() doesn't count the starting byte gives a grand total of 52 bytes to fill.

Code: (20 bytes) [Select]
0→{°A}ʳFill(°A+1,52)

The above method can also be used to initialize 1-byte values by adjusting the size parameter of Fill() accordingly. Note, though, that it will only work for initializing 2-byte values whose low and high bytes are equal, like 0. To initialize six or fewer 2-byte values that do not adhere to this, use the first method mentioned in this post. To initialize more than six 2-byte values that do not adhere to this, use something like the following method. This example will initialize all 27 variables to the hex value 1337:

Code: (21 bytes) [Select]
ᴇ1337→{°A}ʳCopy(°A,+2,52)

#### squidgetx

• Food.
• CoT Emeritus
• LV10 31337 u53r (Next: 2000)
• Posts: 1881
• Rating: +503/-17
• rawr.
##### Re: The Optimization Compilation
« Reply #55 on: February 03, 2011, 08:09:53 pm »
Added discussion regarding preevaluating expressions. It seems easy, but sometimes you don't remember to do it (I know I didn't in SandLand)

Pre-evaluating expressions: Especially in games that heavily reference arrays throughout a section of code, it is often good both for speed and memory to pre-evaluate expressions that do not change throughout the loop. Look at this code for drawing a scrolling 16x16 tilemapper with X and Y positions in pixels:
Code: [Select]
For(A,0,7)For(B,0,11)If {Y/8+B*16+(X/8)+A+L1}Pt-On(A*8-(X^8),B*8-(Y^8),{Y/8+B*32+(X/8)+A}*8+Pic0EndEndEndThere is a HUGE speed gain from simply preevaluating some of the expressions before entering the loop:
Code: [Select]
X/8->EY/8->FX^8->IY^8->JFor(A,0,7)For(B,0,11)If {F+B*16+E+A+L1}->CPt-On(A*8-I,B*8-J,C*8+Pic0EndEndEnd

...and also added the thing about Fill(). Man, this thing is getting hard to edit
« Last Edit: February 03, 2011, 08:16:42 pm by squidgetx »

#### calcdude84se

• Needs Motivation
• LV11 Super Veteran (Next: 3000)
• Posts: 2272
• Rating: +78/-13
• Wondering where their free time went...
##### Re: The Optimization Compilation
« Reply #56 on: February 05, 2011, 09:51:28 pm »
Code: [Select]
X/8->EY/8->FX^8->IY^8->JFor(A,0,7)*8-I->GFor(B,0,11)If {F+B*16+E+A+L1}->CPt-On(G,B*8-J,C*8+Pic0EndEndEndEven pre-evaluating for inner For( loops
« Last Edit: February 05, 2011, 09:51:51 pm by calcdude84se »
"People think computers will keep them from making mistakes. They're wrong. With computers you make mistakes faster."
I'll put it online when it does something.

#### Happybobjr

• James Oldiges
• LV11 Super Veteran (Next: 3000)
• Posts: 2325
• Rating: +128/-20
• Howdy :)
##### Re: The Optimization Compilation
« Reply #57 on: February 05, 2011, 09:55:46 pm »

X/8->E
Y/8->F
X^8->I
Y^8->J
For(A,0,7)
*8-I->G
For(B,0,11)
If {+F*16+E+A+L1}->C
Pt-On(G,B*8-J,C*8+Pic0
End
End
End

could you optimize that to... ^
« Last Edit: February 05, 2011, 09:56:22 pm by Happybobjr »
School: East Central High School

Axe: １.０.0
TI-84 +SE  ||| OS: 2.53 MP (patched) ||| Version: "M"
TI-Nspire    |||  Lent out, and never returned
____________________________________________________________

#### calcdude84se

• Needs Motivation
• LV11 Super Veteran (Next: 3000)
• Posts: 2272
• Rating: +78/-13
• Wondering where their free time went...
##### Re: The Optimization Compilation
« Reply #58 on: February 05, 2011, 09:58:12 pm »
Yes you can
"People think computers will keep them from making mistakes. They're wrong. With computers you make mistakes faster."
I'll put it online when it does something.

#### calc84maniac

• eZ80 Guru
• Coder Of Tomorrow
• LV11 Super Veteran (Next: 3000)
• Posts: 2912
• Rating: +471/-17
##### Re: The Optimization Compilation
« Reply #59 on: February 05, 2011, 10:03:19 pm »
No, that doesn't work. You're not guaranteed that the last result will be B in the first statement of the For( loop. In fact, I tested and it isn't. It would actually be 11-B (though I wouldn't rely on that since it might change in other versions of Axe)
"Most people ask, 'What does a thing do?' Hackers ask, 'What can I make it do?'" - Pablos Holman