diff options
| author | Drahflow <drahflow@gmx.de> | 2015-05-13 15:05:07 +0200 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2015-05-13 15:05:07 +0200 |
| commit | ec762220e5ec0785b8860af226fa517aac8494bc (patch) | |
| tree | d30db40fc45ccdd8bf4c3d00aa6b9abb894c737d | |
| parent | 505524b45f59263fb29057e829b9a39ef86e0e99 (diff) | |
Now with 57% less runtime
| -rw-r--r-- | compiler/elymasAsmLib.ey | 19 | ||||
| -rw-r--r-- | compiler/elymasGlobal.ey | 12 | ||||
| -rw-r--r-- | elymas/lib/sys/opt.ey | 42 |
3 files changed, 62 insertions, 11 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey index fdf97b8..ce5ffcf 100644 --- a/compiler/elymasAsmLib.ey +++ b/compiler/elymasAsmLib.ey @@ -938,8 +938,17 @@ @allocateFromSystem heapSize /rax :movqImmReg /rax /rdi :movqMemReg - ALLOCCHUNKSIZE /rsi :movqImmReg # size of new block + ALLOCCHUNKSIZE /rax :movqImmReg # minimum size of new block + /rdi /rcx :movqRegReg + 24 /rcx :shrqImm8Reg + /rcx :incqReg + /rdx /rdx :xorqRegReg + /rcx :mulqReg # allocate more if heap is already large + /rax /rsi :movqRegReg + /rsi :pushqReg + /rsi /rdi :addqRegReg + heapSize /rax :movqImmReg /rdi /rax :movqRegMem /rsi /rdi :subqRegReg /rax :movqImmOOBReg HEAPBASE @@ -950,7 +959,11 @@ heapSize /rax :movqImmReg /rax /rdi :movqMemReg 7 /rdi :shrqImm8Reg - ALLOCCHUNKSIZE 128 udiv /rsi :movqImmReg + + /rsi :popqReg + 7 /rsi :shrqImm8Reg + /rsi :pushqReg + /rsi /rdi :subqRegReg /rax :movqImmOOBReg BLOCKBASE /rax /rdi :addqRegReg @@ -959,7 +972,7 @@ heapSize /rax :movqImmReg /rax /rdi :movqMemReg 7 /rdi :shrqImm8Reg - ALLOCCHUNKSIZE 128 udiv /rsi :movqImmReg + /rsi :popqReg /rsi /rdi :subqRegReg /rax :movqImmOOBReg MARKBASE /rax /rdi :addqRegReg diff --git a/compiler/elymasGlobal.ey b/compiler/elymasGlobal.ey index e7cea98..90fbfda 100644 --- a/compiler/elymasGlobal.ey +++ b/compiler/elymasGlobal.ey @@ -1809,12 +1809,12 @@ %30 -101* /eydefvst defv %31 -101* /eydeffst defv %33 -101* /eydefmst defv - %50 -101* /eydefvc defv - %51 -101* /eydeffc defv - %53 -101* /eydefmc defv - %D0 -101* /eydefvd defv - %D1 -101* /eydeffd defv - %D3 -101* /eydefmd defv + %40 -101* /eydefvc defv + %41 -101* /eydeffc defv + %43 -101* /eydefmc defv + %C0 -101* /eydefvd defv + %C1 -101* /eydeffd defv + %C3 -101* /eydefmd defv -- # retype a function diff --git a/elymas/lib/sys/opt.ey b/elymas/lib/sys/opt.ey index 0adef46..74f8380 100644 --- a/elymas/lib/sys/opt.ey +++ b/elymas/lib/sys/opt.ey @@ -173,6 +173,9 @@ /keys /dom /add /and /band /bor /bxor /div /eq /ge /gt /le /lt /mod /mul /neq /or /sub /udiv /umod /xor /bnot /neg /not ] { | ::rawCodeAddress } [ 0 ] [ 0 ] '' * ==:SCOPETIGHTFUNCTIONS + [ + /defvs /deffs /defms /defvst /deffst /defmst + ] { | ::rawCodeAddress } [ 0 ] [ 0 ] '' * ==:STATICDEFININGFUNCTIONS { ==o ==executingScope 0 ==containsScopeModifications @@ -250,6 +253,17 @@ } /testNametableTemplatability deffst { ==logic + [ logic { ==entry 0 entry * ==action + action CALL eq { 1 entry * "/" | ::rawCodeAddress eq }' andif { + "dropped call to /" dump + # drop call to / + } { + entry + } ? * + } each ] + } /rewriteSlash deffst + + { ==logic [ NOP ] ==last [ logic { ==entry 0 entry * ==action [ @@ -300,12 +314,35 @@ "resolution failed" die } ? * } + { templateNametable { action CALL eq }' andif { 1 entry * STATICDEFININGFUNCTIONS eq any }' andif + { 0 last * PUSH eq }' andif }' { + 1 last * ::rawObject ==constant + + constant executingScope sys .resolveInfo { + ==mode -- ==parentCount 32 add ==offsetInScope ==inExtensionArea + inExtensionArea { offsetInScope 8 add =offsetInScope } rep + + inExtensionArea not { # FIXME: implement the extension area case + mode 16 div 1 band { + [ STATICWRITE offsetInScope parentCount inExtensionArea ] =last + [ NOP ] =entry + } { } ? * + + "Rewrote def* of " dump constant dump + } rep + } { + executingScope dump + executingScope keys dump + constant dump + "resolution failed" die + } ? * + } ] conds last entry =last } each last ] - } /rewriteConstantEquals deffst + } /rewriteConstantAssignment deffst { _ ==logic 2 logic len range { ==i i logic * ==entry 0 entry * ==action i 1 sub logic * ==last i 2 sub logic * ==secondLast @@ -791,9 +828,10 @@ newLogic testNametableTemplatability testScopeModifications + rewriteSlash containsScopeModifications not { rewriteConstantPipe - rewriteConstantEquals + rewriteConstantAssignment } rep rewriteConstantDot rewriteConstantStar |
