aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib/sys
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2015-06-22 13:26:49 +0200
committerDrahflow <drahflow@gmx.de>2015-06-22 13:26:49 +0200
commitc928ded416dd1cd5ef01df1e5768c07868000e86 (patch)
tree721204394f46f6b2f11f2830a85ab2359c18079e /elymas/lib/sys
parent483c65f6132fb81113227c67da79bf5fe66166ec (diff)
Finally rewrite extension area access to constant scope size
... also fixes a nasty bug when STATICWRITE from PUSH in rewriteIntegerTrace
Diffstat (limited to 'elymas/lib/sys')
-rw-r--r--elymas/lib/sys/opt.ey62
1 files changed, 20 insertions, 42 deletions
diff --git a/elymas/lib/sys/opt.ey b/elymas/lib/sys/opt.ey
index 3d6e922..92f3d14 100644
--- a/elymas/lib/sys/opt.ey
+++ b/elymas/lib/sys/opt.ey
@@ -108,10 +108,8 @@
[
24 /rax /rcx :movqMemDisp8Reg # load extension area pointer
- /rax /edx :movlMemReg # load scope length
- /rdx :negqReg # prepare for substraction
/rbx :popqReg
- 0 1 /rdx /rcx /rax :movqMemIndexScaleDisp32Reg # load entry
+ 0 /rcx /rax :movqMemDisp32Reg # load entry
] ==:staticLoadFromExtensionPattern
[
@@ -474,7 +472,7 @@
constant executingScope sys .resolveInfo _ ==loadedObject {
==mode -- ==parentCount 32 add ==offsetInScope ==inExtensionArea
- inExtensionArea { offsetInScope 8 add =offsetInScope } rep
+ inExtensionArea 0 gt { offsetInScope inExtensionArea sub 8 add =offsetInScope 1 =inExtensionArea } rep
[
{ mode 16 div 1 band }' { # static case
@@ -509,7 +507,7 @@
constant executingScope sys .resolveInfo {
==mode -- ==parentCount 32 add ==offsetInScope ==inExtensionArea
- inExtensionArea { offsetInScope 8 add =offsetInScope } rep
+ inExtensionArea 0 gt { offsetInScope inExtensionArea sub 8 add =offsetInScope 1 =inExtensionArea } rep
mode 16 div 1 band {
[ NOP ] =last
@@ -528,9 +526,9 @@
constant executingScope sys .resolveInfo {
==mode -- ==parentCount 32 add ==offsetInScope ==inExtensionArea
- inExtensionArea { offsetInScope 8 add =offsetInScope } rep
+ inExtensionArea 0 gt { offsetInScope inExtensionArea sub 8 add =offsetInScope 1 =inExtensionArea } rep
- inExtensionArea not { # FIXME: implement the extension area case
+ inExtensionArea not { # FIXME: implement the extension area case, needs to create extension area on write
mode 16 div 1 band {
[ NOP ] =last
[ STATICWRITE offsetInScope parentCount inExtensionArea ] =entry
@@ -567,7 +565,7 @@
constant relevantScope sys .resolveInfo _ ==loadedObject {
==mode -- ==parentCount 32 add ==offsetInScope ==inExtensionArea
- inExtensionArea { offsetInScope 8 add =offsetInScope } rep
+ inExtensionArea 0 gt { offsetInScope inExtensionArea sub 8 add =offsetInScope 1 =inExtensionArea } rep
[
{ mode 16 div 1 band }' { # static case
@@ -1158,19 +1156,15 @@
2 entry 1 sub { 16 target target :movqMemDisp8Reg } rep
3 entry {
- target /eax :movlMemReg # load scope length
24 target target :movqMemDisp8Reg # load extension area pointer
- /rax :negqReg # prepare for substraction # TODO the length calculation could be done beforehand
- 1 entry 1 /rax target target :movqMemIndexScaleDisp32Reg
+ 1 entry target target :movqMemDisp32Reg
} {
1 entry target target :movqMemDisp32Reg
} ? *
} {
3 entry {
- /r14 /eax :movlMemReg # load scope length
24 /r14 target :movqMemDisp8Reg # load extension area pointer
- /rax :negqReg # prepare for substraction # TODO the length calculation could be done beforehand
- 1 entry 1 /rax target target :movqMemIndexScaleDisp32Reg
+ 1 entry target target :movqMemDisp32Reg
} {
1 entry /r14 target :movqMemDisp32Reg
} ? *
@@ -1507,7 +1501,7 @@
{ 0 source PUSH eq } {
/rax =reg
traceCode [
- 1 source /rax :movqImmReg
+ 1 source tmpreg :movqImmReg
] cat =traceCode
}
{ |source hasRegister } {
@@ -1559,11 +1553,8 @@
3 entry {
traceCode [
- tmpreg :pushqReg
- 24 /rax tmpreg :movqMemDisp8Reg # load extension area pointer
- /rax /eax :movlMemReg # load scope length
- /rax :negqReg # prepare for substraction
- 1 entry 1 /rax tmpreg :popqMemIndexScaleDisp32 # load entry from stack
+ 24 /rax /rax :movqMemDisp8Reg # load extension area pointer
+ tmpreg 1 entry /rax :movqRegMemDisp32 # write entry
] cat =traceCode
} {
traceCode [
@@ -1573,11 +1564,8 @@
} {
3 entry {
traceCode [
- tmpreg :pushqReg
- 24 /r14 tmpreg :movqMemDisp8Reg # load extension area pointer
- /r14 /eax :movlMemReg # load scope length
- /rax :negqReg # prepare for substraction
- 1 entry 1 /rax tmpreg :popqMemIndexScaleDisp32 # load entry from stack
+ 24 /r14 /rax :movqMemDisp8Reg # load extension area pointer
+ tmpreg 1 entry /rax :movqRegMemDisp32 # write entry
] cat =traceCode
} {
traceCode [
@@ -2217,11 +2205,11 @@
}
{ staticLoadFromExtensionPattern callTargetMatch }' {
- [ loadStart 14 add _ 4 add range peek each ] 256 math .unbase ==offsetInScope
+ [ loadStart 8 add _ 4 add range peek each ] 256 math .unbase ==offsetInExtensionArea
[ calledAddress 8 sub _ 8 add range peek each ] 256 math .unbase ==exampleObjectOffset
[ calledAddress exampleObjectOffset add _ 8 add range peek each ] 256 math .unbase ::rawObject ==exampleObject
- [ STATICTYPED offsetInScope parentCount 1 exampleObject ] emitLogic
+ [ STATICTYPED offsetInExtensionArea parentCount 1 exampleObject ] emitLogic
exampleObject protectReference
}
@@ -2461,18 +2449,14 @@
3 entry {
24 /rax /rcx :movqMemDisp8Reg # load extension area pointer
- /rax /edx :movlMemReg # load scope length
- /rdx :negqReg # prepare for substraction # TODO the length calculation could be done beforehand
- 1 entry 1 /rdx /rcx :pushqMemIndexScaleDisp32 # push loaded entry to stack
+ 1 entry /rcx :pushqMemDisp32 # push loaded entry to stack
} {
1 entry /rax :pushqMemDisp32
} ? *
} {
3 entry {
24 /r14 /rcx :movqMemDisp8Reg # load extension area pointer
- /r14 /edx :movlMemReg # load scope length
- /rdx :negqReg # prepare for substraction # TODO the length calculation could be done beforehand
- 1 entry 1 /rdx /rcx :pushqMemIndexScaleDisp32 # push loaded entry to stack
+ 1 entry /rcx :pushqMemDisp32 # push loaded entry to stack
} {
1 entry /r14 :pushqMemDisp32
} ? *
@@ -2488,18 +2472,14 @@
3 entry {
24 /rax /rcx :movqMemDisp8Reg # load extension area pointer
- /rax /edx :movlMemReg # load scope length
- /rdx :negqReg # prepare for substraction
- 1 entry 1 /rdx /rcx :popqMemIndexScaleDisp32 # load entry from stack
+ 1 entry /rcx :popqMemDisp32 # load entry from stack
} {
1 entry /rax :popqMemDisp32
} ? *
} {
3 entry {
24 /r14 /rcx :movqMemDisp8Reg # load extension area pointer
- /r14 /edx :movlMemReg # load scope length
- /rdx :negqReg # prepare for substraction
- 1 entry 1 /rdx /rcx :popqMemIndexScaleDisp32 # load entry from stack
+ 1 entry /rcx :popqMemDisp32 # load entry from stack
} {
1 entry /r14 :popqMemDisp32
} ? *
@@ -2514,9 +2494,7 @@
3 entry {
24 /rax /rcx :movqMemDisp8Reg # load extension area pointer
- /rax /edx :movlMemReg # load scope length
- /rdx :negqReg # prepare for substraction
- 1 entry 1 /rdx /rcx :pushqMemIndexScaleDisp32 # push loaded entry to stack
+ 1 entry /rcx :pushqMemDisp32 # push loaded entry to stack
} {
1 entry /rax :pushqMemDisp32
} ? *