diff options
| author | Drahflow <drahflow@gmx.de> | 2013-01-25 20:05:35 +0100 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2013-01-25 20:05:35 +0100 |
| commit | 618c0f4fd9bf2e030f239a633ed3fb30e8859b1a (patch) | |
| tree | b10788443bdd58ebc1bb472c210d7c16af80f743 /compiler | |
| parent | a3e9bfdc218f6e0bda4a6f43c405475aa2542458 (diff) | |
sys .asm .syscall
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/elymasAsm.ey | 9 | ||||
| -rw-r--r-- | compiler/elymasGlobal.ey | 78 |
2 files changed, 65 insertions, 22 deletions
diff --git a/compiler/elymasAsm.ey b/compiler/elymasAsm.ey index 54f6c7a..5d28e96 100644 --- a/compiler/elymasAsm.ey +++ b/compiler/elymasAsm.ey @@ -584,6 +584,15 @@ disp imm8 } /movbMemDisp8Reg deff + { ==mem ==reg + reg bit8assert + mem bit64assert + + reg regno %07 gt mem regno %07 gt or { 0 reg /none mem rex } rep + %88 + reg mem modrm00 + } /movbRegMem deff + { ==mem ==i mem bit64assert i 65536 lt assert diff --git a/compiler/elymasGlobal.ey b/compiler/elymasGlobal.ey index a5e58c7..d9c8524 100644 --- a/compiler/elymasGlobal.ey +++ b/compiler/elymasGlobal.ey @@ -1576,6 +1576,27 @@ ::unscopingFunctionHeader ::unscopingFunctionFooter -102* /ey}' defv > _ ==globalMacros { defv }' ::allocateOffsetStruct + { =*resolve ==createScopeEntry + { ==name + # create function + name resolve 8 sub /rdi :movqImmReg # adjust for expected (but non-existent) code block header size + /rsi /rsi :xorqRegReg # library functions don't have a captured scope + # TODO: put a type here where applicable + /rdx /rdx :xorqRegReg + + ::internalAllocateFunction /rax :movqImmReg + /rax :callqReg + /rax :pushqReg + + # create string + name "ey(.*)" regex assert ::constStringCode _ len dearray + + # enter into current (i.e. global) scope + createScopeEntry /rax :movqImmReg + /rax :callqReg + } each + } /createScopeEntries deff + [ globalFunctions keys len globalFunctions2 keys len add @@ -1589,31 +1610,44 @@ ::currentScope /rdi :movqImmReg /rax /rdi :movqRegMem - { ==createScopeEntry - { ==name - # create function - name | 8 sub /rdi :movqImmReg - /rsi /rsi :xorqRegReg # library functions don't have a captured scope - # TODO: put a type here where applicable - /rdx /rdx :xorqRegReg + globalFunctions keys eydeff { | }' createScopeEntries + globalFunctions2 keys eydeff { | }' createScopeEntries + globalFunctions3 keys eydeff { | }' createScopeEntries + globalMacros keys eydefq { | }' createScopeEntries + ] :execute - ::internalAllocateFunction /rax :movqImmReg - /rax :callqReg - /rax :pushqReg + { ==name + [[ + INITIALSCOPESIZE /rdi :movqImmReg + ::currentScope /rsi :movqImmReg + 8 /r15 :subqImm8Reg + /rsi /rsi :movqMemReg + /rsi /r15 :movqRegMem # save scope + ::internalAllocateScope /rax :movqImmReg + /rax :callqReg + /rax :pushqReg - # create string - name "ey(.*)" regex assert ::constStringCode _ len dearray + /rax :pushqReg + /rax :movqImmOOBReg name ::string + /rax :pushqReg + |eydefv /rax :movqImmReg + /rax :callqReg - # enter into current (i.e. global) scope - createScopeEntry /rax :movqImmReg - /rax :callqReg - } each - } /createScopeEntries deff - globalFunctions keys eydeff createScopeEntries - globalFunctions2 keys eydeff createScopeEntries - globalFunctions3 keys eydeff createScopeEntries - globalMacros keys eydefq createScopeEntries - ] :execute + ::currentScope /rsi :movqImmReg + /rsi :popqMem + ]] :execute + } /enterSubScope deff + + { + [[ + ::currentScope /rsi :movqImmReg + /r15 /rax :movqMemReg + 8 /r15 :addqImm8Reg + /rax /rsi :movqRegMem + ]] :execute + } /leaveSubScope deff + + "elymasGlobalSys.ey" include > /global defv # vim: syn=elymas |
