aboutsummaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2014-01-08 14:51:54 +0100
committerDrahflow <drahflow@gmx.de>2014-01-08 14:51:54 +0100
commit481d950d8a5d53dc465fab61fbd3ae5a3d393fc1 (patch)
tree70a6bb6daad07d1725e48d3ce90b609fbf6eba75 /compiler
parent90d664bc9e77530113c9a65bd02bae4667a2c25c (diff)
Freeing heap type markers 2-3 for scalars (floats)
Diffstat (limited to 'compiler')
-rw-r--r--compiler/elymasAsmLib.ey94
-rw-r--r--compiler/elymasGlobal.ey4
-rw-r--r--compiler/standardClient.ey16
3 files changed, 57 insertions, 57 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey
index 91e3689..14e297c 100644
--- a/compiler/elymasAsmLib.ey
+++ b/compiler/elymasAsmLib.ey
@@ -471,11 +471,7 @@
/markInteger :jzLbl32
/rax :decqReg
/markString :jzLbl32
- /rax :decqReg
- /markScope :jzLbl32
- /rax :decqReg
- /markNameTable :jzLbl32
- /rax :decqReg
+ 3 /rax :subqImm8Reg
/markExtensionArea :jzLbl32
/rax :decqReg
/markFunction :jzLbl32
@@ -485,6 +481,10 @@
/markArray :jzLbl32
/rax :decqReg
/markFunctionType :jzLbl32
+ /rax :decqReg
+ /markScope :jzLbl32
+ /rax :decqReg
+ /markNameTable :jzLbl32
@markInvalidType
/rax /rbx :movqRegReg # for easier inspection
@@ -501,46 +501,6 @@
# " string marked\n" outputError
:retn
- @markScope
- # /rdi :pushqReg
- # "scope marked\n" outputError
- # /rdi :popqReg
-
- /rcx :pushqReg
- /rsi :pushqReg
- /rdi /ecx :movlMemReg
- /rdi /rsi :movqRegReg
- 8 /rcx :subqImm8Reg
- @markScopeLoop
- /rsi /rcx /rdi :movqMemIndexReg
- /markObject :callqLbl32
- 8 /rcx :subqImm8Reg
- /markScopeLoop :jnzLbl8
- /rsi :popqReg
- /rcx :popqReg
- :retn
-
- @markNameTable
- # /rdi :pushqReg
- # "name table marked\n" outputError
- # /rdi :popqReg
-
- /rcx :pushqReg
- /rsi :pushqReg
- 8 /rdi /ecx :movlMemDisp8Reg
- /rdi /rsi :movqRegReg
- 16 /rcx :subqImm8Reg
- /markNameTableEmpty :jzLbl8
- @markNameTableLoop
- /rsi /rcx /rdi :movqMemIndexReg
- /markObject :callqLbl32
- 16 /rcx :subqImm8Reg
- /markNameTableLoop :jnzLbl8
- @markNameTableEmpty
- /rsi :popqReg
- /rcx :popqReg
- :retn
-
@markExtensionArea
# /rdi :pushqReg
# "extension area marked\n" outputError
@@ -663,6 +623,46 @@
/rcx :popqReg
:retn
+ @markScope
+ # /rdi :pushqReg
+ # "scope marked\n" outputError
+ # /rdi :popqReg
+
+ /rcx :pushqReg
+ /rsi :pushqReg
+ /rdi /ecx :movlMemReg
+ /rdi /rsi :movqRegReg
+ 8 /rcx :subqImm8Reg
+ @markScopeLoop
+ /rsi /rcx /rdi :movqMemIndexReg
+ /markObject :callqLbl32
+ 8 /rcx :subqImm8Reg
+ /markScopeLoop :jnzLbl8
+ /rsi :popqReg
+ /rcx :popqReg
+ :retn
+
+ @markNameTable
+ # /rdi :pushqReg
+ # "name table marked\n" outputError
+ # /rdi :popqReg
+
+ /rcx :pushqReg
+ /rsi :pushqReg
+ 8 /rdi /ecx :movlMemDisp8Reg
+ /rdi /rsi :movqRegReg
+ 16 /rcx :subqImm8Reg
+ /markNameTableEmpty :jzLbl8
+ @markNameTableLoop
+ /rsi /rcx /rdi :movqMemIndexReg
+ /markObject :callqLbl32
+ 16 /rcx :subqImm8Reg
+ /markNameTableLoop :jnzLbl8
+ @markNameTableEmpty
+ /rsi :popqReg
+ /rcx :popqReg
+ :retn
+
# allocate next chunk of memory from the operating system
@allocateFromSystem
@@ -776,7 +776,7 @@
# CHECK this is just sanity checking
7 /rdi /al :movbMemDisp8Reg
%F0 /al :andbImmReg
- %20 /al :cmpbImmReg
+ %90 /al :cmpbImmReg
/isScope :jeLbl8
"object resolving in is not a scope" outputError
@@ -956,7 +956,7 @@
/rax :callqReg
# set type and existence of all pointers
- %26 7 /rax :orbImmMemDisp8
+ %96 7 /rax :orbImmMemDisp8
16 /rax :popqMemDisp8 # set parent
:retn
diff --git a/compiler/elymasGlobal.ey b/compiler/elymasGlobal.ey
index 01db3b8..b3f3ab6 100644
--- a/compiler/elymasGlobal.ey
+++ b/compiler/elymasGlobal.ey
@@ -208,7 +208,7 @@
::internalAllocateAndZero /rax :movqImmReg
/rax :callqReg
- %30 7 /rax :orbImmMemDisp8 # set type
+ %A0 7 /rax :orbImmMemDisp8 # set type
/rdx :popqReg
8 /rdx /rcx :movqMemDisp8Reg
/rcx 8 /rax :movqRegMemDisp8 # copy fill
@@ -226,7 +226,7 @@
INITIALNAMETABLESIZE 16 mul 16 add /rdi :movqImmReg
::internalAllocateAndZero /rax :movqImmReg
/rax :callqReg
- %30 7 /rax :orbImmMemDisp8 # set type
+ %A0 7 /rax :orbImmMemDisp8 # set type
16 8 /rax :orbImmMemDisp8 # set initial fill
16 /rax /rdi :leaqMemDisp8Reg # load first entry address
diff --git a/compiler/standardClient.ey b/compiler/standardClient.ey
index 1fb102f..801a003 100644
--- a/compiler/standardClient.ey
+++ b/compiler/standardClient.ey
@@ -505,8 +505,8 @@
object sys .typed .type [
literal # integer
literal # string
- literal # scope
- invalid # name table
+ unknown
+ unknown
invalid # extension area
{ object sys .typed .inputs ==in
in len 1 neq { "multi-input function in typeStack" die } rep
@@ -518,8 +518,8 @@
invalid # function code
{ [ 1 0 object len 1 sub ] 0 object * typeStackInternal } # array
invalid # function type
- unknown
- unknown
+ literal # scope
+ invalid # name table
unknown
unknown
unknown
@@ -792,8 +792,8 @@
sys .typed .type [
{ o base16encode64 sys .err .writeall } # integer
{ "\"" o "\"" cat cat sys .err .writeall } # string
- { "<scope: " o sys .asm .rawAddress base16encode64 cat ">" cat sys .err .writeall }
- invalid # name table
+ unknown
+ unknown
invalid # extension area
{ "<function: " o sys .asm .rawAddress base16encode64 cat ">" cat sys .err .writeall }
{ "<function code: " o sys .asm .rawAddress base16encode64 cat ">" cat sys .err .writeall }
@@ -803,8 +803,8 @@
"" indent { " " cat } rep "]" cat sys .err .writeall
} # array
invalid # function type
- unknown
- unknown
+ { "<scope: " o sys .asm .rawAddress base16encode64 cat ">" cat sys .err .writeall }
+ invalid # name table
unknown
unknown
unknown