Update kernel's proc32.inc from fasm source

* Resulting kernel.bin did not change.
* This file had KolibriOS copyright header which I did not preserve
  because we use it unchanged as shipped with fasm.

git-svn-id: svn://kolibrios.org@7294 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Ivan Baravy 2018-06-15 00:31:47 +00:00
parent 5220da9d33
commit d00e5c3855

View File

@ -1,12 +1,3 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$Revision$
; Macroinstructions for defining and calling procedures ; Macroinstructions for defining and calling procedures
@ -64,11 +55,15 @@ macro proc [args] ; define procedure
prologue@proc equ prologuedef prologue@proc equ prologuedef
macro prologuedef procname,flag,parmbytes,localbytes,reglist macro prologuedef procname,flag,parmbytes,localbytes,reglist
{ if parmbytes | localbytes { local loc
loc = (localbytes+3) and (not 3)
parmbase@proc equ ebp+8
localbase@proc equ ebp-loc
if parmbytes | localbytes
push ebp push ebp
mov ebp, esp mov ebp, esp
if localbytes if localbytes
sub esp, localbytes sub esp, loc
end if end if
end if end if
irps reg, reglist \{ push reg \} } irps reg, reglist \{ push reg \} }
@ -80,12 +75,14 @@ macro epiloguedef procname,flag,parmbytes,localbytes,reglist
if parmbytes | localbytes if parmbytes | localbytes
leave leave
end if end if
if (flag and 10000b) | (parmbytes=0) if flag and 10000b
retn retn
else else
retn parmbytes retn parmbytes
end if } end if }
close@proc equ
macro define@proc name,statement macro define@proc name,statement
{ local params,flag,regs,parmbytes,localbytes,current { local params,flag,regs,parmbytes,localbytes,current
if used name if used name
@ -100,24 +97,25 @@ macro define@proc name,statement
flag = 10001b \} flag = 10001b \}
match =params, params \{ params equ statement match =params, params \{ params equ statement
flag = 0 \} flag = 0 \}
virtual at ebp+8
match =uses reglist=,args, params \{ regs equ reglist match =uses reglist=,args, params \{ regs equ reglist
params equ args \} params equ args \}
match =regs =uses reglist, regs params \{ regs equ reglist match =regs =uses reglist, regs params \{ regs equ reglist
params equ \} params equ \}
match =regs, regs \{ regs equ \} match =regs, regs \{ regs equ \}
match prologue:reglist, prologue@proc:<regs> \{ prologue name,flag,parmbytes,localbytes,reglist \}
virtual at parmbase@proc
match =,args, params \{ defargs@proc args \} match =,args, params \{ defargs@proc args \}
match =args@proc args, args@proc params \{ defargs@proc args \} match =args@proc args, args@proc params \{ defargs@proc args \}
parmbytes = $ - (ebp+8) parmbytes = $-(parmbase@proc)
end virtual end virtual
name # % = parmbytes/4 name # % = parmbytes/4
all@vars equ all@vars equ
current = 0 current = 0
match prologue:reglist, prologue@proc:<regs> \{ prologue name,flag,parmbytes,localbytes,reglist \}
macro locals macro locals
\{ virtual at ebp-localbytes+current \{ virtual at localbase@proc+current
macro label . \\{ deflocal@proc .,:, \\} macro label def \\{ match . type,def> \\\{ deflocal@proc .,label,<type \\\} \\}
struc db [val] \\{ \common deflocal@proc .,db,val \\} struc db [val] \\{ \common deflocal@proc .,db,val \\}
struc du [val] \\{ \common deflocal@proc .,du,val \\}
struc dw [val] \\{ \common deflocal@proc .,dw,val \\} struc dw [val] \\{ \common deflocal@proc .,dw,val \\}
struc dp [val] \\{ \common deflocal@proc .,dp,val \\} struc dp [val] \\{ \common deflocal@proc .,dp,val \\}
struc dd [val] \\{ \common deflocal@proc .,dd,val \\} struc dd [val] \\{ \common deflocal@proc .,dd,val \\}
@ -131,17 +129,17 @@ macro define@proc name,statement
struc rq cnt \\{ deflocal@proc .,rq cnt, \\} \} struc rq cnt \\{ deflocal@proc .,rq cnt, \\} \}
macro endl macro endl
\{ purge label \{ purge label
restruc db,dw,dp,dd,dt,dq restruc db,du,dw,dp,dd,dt,dq
restruc rb,rw,rp,rd,rt,rq restruc rb,rw,rp,rd,rt,rq
restruc byte,word,dword,pword,tword,qword current = $-(localbase@proc)
current = $-(ebp-localbytes)
end virtual \} end virtual \}
macro ret operand macro ret operand
\{ match any, operand \\{ retn operand \\} \{ match any, operand \\{ retn operand \\}
match , operand \\{ match epilogue:reglist, epilogue@proc:<regs> match , operand \\{ match epilogue:reglist, epilogue@proc:<regs> \\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \}
\\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} macro finish@proc
macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2 \{ localbytes = current
end if \} } match close:reglist, close@proc:<regs> \\{ close name,flag,parmbytes,localbytes,reglist \\}
end if \} }
macro defargs@proc [arg] macro defargs@proc [arg]
{ common { common
@ -172,6 +170,8 @@ macro defargs@proc [arg]
common common
end if } end if }
macro deflocal@proc name,def,[val] { name def val }
macro deflocal@proc name,def,[val] macro deflocal@proc name,def,[val]
{ common { common
match vars, all@vars \{ all@vars equ all@vars, \} match vars, all@vars \{ all@vars equ all@vars, \}
@ -180,7 +180,9 @@ macro deflocal@proc name,def,[val]
local ..var,..tmp local ..var,..tmp
..var def val ..var def val
match =?, val \{ ..tmp equ \} match =?, val \{ ..tmp equ \}
match any =dup (=?), val \{ ..tmp equ \} match any =?, val \{ ..tmp equ \}
match any (=?), val \{ ..tmp equ \}
match =label, def \{ ..tmp equ \}
match tmp : value, ..tmp : val match tmp : value, ..tmp : val
\{ tmp: end virtual \{ tmp: end virtual
initlocal@proc ..var,def value initlocal@proc ..var,def value
@ -188,6 +190,8 @@ macro deflocal@proc name,def,[val]
common common
match first rest, ..var, \{ name equ first \} } match first rest, ..var, \{ name equ first \} }
struc label type { label . type }
macro initlocal@proc name,def macro initlocal@proc name,def
{ virtual at name { virtual at name
def def