diff options
| author | Drahflow <drahflow@gmx.de> | 2013-12-28 17:41:33 +0100 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2013-12-28 17:41:33 +0100 |
| commit | d245b90de88b762f65a5007c1776206dc7cd72dc (patch) | |
| tree | 342e65618ef54cf788a10fd8e64ebd52579a5f25 /elymas/lib | |
| parent | e57558ebe4635cb0183f94c50f9f61e8603807ff (diff) | |
Reducing memory footprint
Diffstat (limited to 'elymas/lib')
| -rw-r--r-- | elymas/lib/sys/opt.ey | 12 | ||||
| -rw-r--r-- | elymas/lib/sys/so.ey | 15 | ||||
| -rw-r--r-- | elymas/lib/txt.ey | 6 |
3 files changed, 23 insertions, 10 deletions
diff --git a/elymas/lib/sys/opt.ey b/elymas/lib/sys/opt.ey index 7e90457..8f54e1e 100644 --- a/elymas/lib/sys/opt.ey +++ b/elymas/lib/sys/opt.ey @@ -15,7 +15,7 @@ 8 /r15 :subqImm8Reg /r14 /r15 :movqRegMem /r14 /rsi :movqRegReg - 8 /rdi :movqImmReg + 0 /rdi :movqImmReg # this should match arbitrary INITIALSCOPESIZE, hence 0 0 /rax :movqImmReg /rax :callqReg /rax /r14 :movqRegReg @@ -694,7 +694,13 @@ [ ] ==newOpcodes { newOpcodes -01 cat =newOpcodes }' /emitOpcodes deffst [ ] ==newReferences - { newReferences [ -102 ] cat =newReferences }' /emitReference deffst + { ==ref + [ + { ref 105553116266496 lt } { } # HEAPBASE # FIXME: use a global constant + { ref 123145302310912 ge } { } # %700000000000 + { 1 } { newReferences [ ref ] cat =newReferences } + ] conds + }' /emitReference deffst # [ :ud2 ] emitOpcodes # enable for further development @@ -705,7 +711,7 @@ 8 /r15 :subqImm8Reg /r14 /r15 :movqRegMem /r14 /rsi :movqRegReg - 8 /rdi :movqImmReg + 2 /rdi :movqImmReg # FIXME: this should use INITIALSCOPESIZE ::internalAllocateScope /rax :movqImmReg /rax :callqReg /rax /r14 :movqRegReg diff --git a/elymas/lib/sys/so.ey b/elymas/lib/sys/so.ey index 1a0d367..0b68250 100644 --- a/elymas/lib/sys/so.ey +++ b/elymas/lib/sys/so.ey @@ -832,17 +832,16 @@ # Elf64_Xword sh_entsize; /* Size of entries, if section has table */ s .entsize uint64 } each } each - ] metaSections { .data cat } each ==fileData + ] ==fileHeaders - fileData len str .alloc ==buffer - 0 fileData len range { ==i i fileData * i buffer =[] } each - - buffer out .writeall + 0 ==fileOffset + [ fileHeaders metaSections { .data } each ] { ==data + fileOffset data len add =fileOffset + data str .fromArray out .writeall + } each 1 ==:WRITE - buffer len ==fileOffset - allocSections { ==section section .dataOffset fileOffset sub str .alloc out .writeall section .dataOffset section .dataSize add =fileOffset @@ -862,4 +861,6 @@ } /freeze deffd > /so sys .defv +{ "disabled to free the memory" die } /freeze sys .deff + # vim: syn=elymas diff --git a/elymas/lib/txt.ey b/elymas/lib/txt.ey index faae0ce..01bd495 100644 --- a/elymas/lib/txt.ey +++ b/elymas/lib/txt.ey @@ -27,6 +27,12 @@ { _ { [ -01 10 math .base reverse "0123456789" each ] str .fromArray } { -- "0" } ? * } [ 0 ] [ "" ] ' /u deffd + + # 0 -> positive integer (or zero) + # 0 <- hexadecimal representation as string + { + _ { [ -01 16 math .base reverse "0123456789ABCDEF" each ] str .fromArray } { -- "0" } ? * + } [ 0 ] [ "" ] ' /hu deffd > /produce defvd > /txt defvd |
