comparison src/varargs.inc @ 0:11d4fc797f74

init
author heinrichsweikamp
date Wed, 24 Apr 2013 19:22:45 +0200
parents
children ca4556fb60b9
comparison
equal deleted inserted replaced
-1:000000000000 0:11d4fc797f74
1 ;=============================================================================
2 ;
3 ; File varargs.inc
4 ;
5 ; Utilities to pass multiple arguments in compact code stream.
6 ;
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
8 ;=============================================================================
9 ; HISTORY
10 ; 2011-05-27 : [jDG] Creation.
11 ;
12
13 VARARGS_BEGIN macro
14 movff TOSL, TBLPTRL
15 movff TOSH, TBLPTRH
16 movff TOSU, TBLPTRU
17 endm
18
19 VARARGS_GET8 macro register
20 tblrd*+
21 movff TABLAT, register
22 endm
23
24 VARARGS_GET16 macro register
25 tblrd*+
26 movff TABLAT, register+0
27 tblrd*+
28 movff TABLAT, register+1
29 endm
30
31 VARARGS_GET24 macro register
32 tblrd*+
33 movff TABLAT, register+0
34 tblrd*+
35 movff TABLAT, register+1
36 tblrd*+
37 movff TABLAT, register+2
38 endm
39
40 VARARGS_ALIGN macro
41 local no_tblptr_align
42
43 btfss TBLPTRL,0
44 bra no_tblptr_align
45 incf TBLPTRL
46 movlw 0
47 addwfc TBLPTRH
48 addwfc TBLPTRU
49 no_tblptr_align:
50 endm
51
52 VARARGS_END macro
53 ; Compute string length (modulo 256):
54 movf TOSL,W
55 subwf TBLPTRL,W
56
57 ; Then 24bit add to return address
58 addwf TOSL,F
59 movlw 0 ; Clear WREG, but keep carry
60 addwfc TOSH,F
61 addwfc TOSU,F
62 endm
63