Mercurial > public > hwos_code
diff src/varargs.inc @ 0:11d4fc797f74
init
author | heinrichsweikamp |
---|---|
date | Wed, 24 Apr 2013 19:22:45 +0200 |
parents | |
children | ca4556fb60b9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/varargs.inc Wed Apr 24 19:22:45 2013 +0200 @@ -0,0 +1,63 @@ +;============================================================================= +; +; File varargs.inc +; +; Utilities to pass multiple arguments in compact code stream. +; +; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. +;============================================================================= +; HISTORY +; 2011-05-27 : [jDG] Creation. +; + +VARARGS_BEGIN macro + movff TOSL, TBLPTRL + movff TOSH, TBLPTRH + movff TOSU, TBLPTRU + endm + +VARARGS_GET8 macro register + tblrd*+ + movff TABLAT, register + endm + +VARARGS_GET16 macro register + tblrd*+ + movff TABLAT, register+0 + tblrd*+ + movff TABLAT, register+1 + endm + +VARARGS_GET24 macro register + tblrd*+ + movff TABLAT, register+0 + tblrd*+ + movff TABLAT, register+1 + tblrd*+ + movff TABLAT, register+2 + endm + +VARARGS_ALIGN macro + local no_tblptr_align + + btfss TBLPTRL,0 + bra no_tblptr_align + incf TBLPTRL + movlw 0 + addwfc TBLPTRH + addwfc TBLPTRU +no_tblptr_align: + endm + +VARARGS_END macro + ; Compute string length (modulo 256): + movf TOSL,W + subwf TBLPTRL,W + + ; Then 24bit add to return address + addwf TOSL,F + movlw 0 ; Clear WREG, but keep carry + addwfc TOSH,F + addwfc TOSU,F + endm +