aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-03-23 17:51:22 +0100
committerDrahflow <drahflow@gmx.de>2013-03-23 17:51:22 +0100
commit95f56bdc3eddb89cc821712e06b8a06f09e35f5a (patch)
tree134913e6538aea2ae4368450bfb9ee50a037986b
parent0f9b660d79392edcc898254e6a648e725534a8e7 (diff)
Unlimited scope sizes
-rw-r--r--compiler/elymasGlobal.ey31
1 files changed, 28 insertions, 3 deletions
diff --git a/compiler/elymasGlobal.ey b/compiler/elymasGlobal.ey
index f8bfe14..2da482d 100644
--- a/compiler/elymasGlobal.ey
+++ b/compiler/elymasGlobal.ey
@@ -220,6 +220,8 @@
/rax :callqReg
/rdx :popqReg
+ %40 7 /rax :orbImmMemDisp8 # set type
+
/rax /rdi :movqRegReg
/rdi 24 /rbx :movqRegMemDisp8 # store new extension area
/inExtensionArea :jmpLbl8
@@ -228,10 +230,33 @@
# if extension area is full, double size
/edx /rdi :cmplRegMem
- /inExtensionArea :jnbLbl8
+ /inExtensionArea :jaLbl8
- "FIXME: extension area is full" ::outputError
- :ud2
+ # indeed full
+ /rdi :pushqReg
+ /rdx :pushqReg
+ /rdi /edi :movlMemReg
+ /rdi /rdi :addqRegReg
+ ::internalAllocate /rax :movqImmReg
+ /rax :callqReg
+ /rdx :popqReg
+ /rdi :popqReg
+
+ %40 7 /rax :orbImmMemDisp8 # set type
+
+ /rdi /rsi :movqRegReg
+ /rax /rdi :movqRegReg
+ /rdi 24 /rbx :movqRegMemDisp8 # store new extension area
+
+ /rdi :pushqReg
+ /rsi /ecx :movlMemReg # load length as copy count
+ 8 /rsi :addqImm8Reg
+ 8 /rdi :addqImm8Reg
+
+ 8 /rcx :subqImm8Reg # substract header length
+ 3 /rcx :shrqImm8Reg
+ :reprcx :movsq # copy content
+ /rdi :popqReg
@inExtensionArea
/rdi /rbx :movqRegReg