aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-12-28 17:41:33 +0100
committerDrahflow <drahflow@gmx.de>2013-12-28 17:41:33 +0100
commitd245b90de88b762f65a5007c1776206dc7cd72dc (patch)
tree342e65618ef54cf788a10fd8e64ebd52579a5f25 /elymas/lib
parente57558ebe4635cb0183f94c50f9f61e8603807ff (diff)
Reducing memory footprint
Diffstat (limited to 'elymas/lib')
-rw-r--r--elymas/lib/sys/opt.ey12
-rw-r--r--elymas/lib/sys/so.ey15
-rw-r--r--elymas/lib/txt.ey6
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