* .version: changed version to 2.5.4
[fw/sdcc] / device / lib / pic / libsdcc / macros.inc
1 ; -----------------------------------------------
2 ; --- generic pointer access helpers
3 ; -----------------------------------------------
4
5 GPTRTAG_DATA    EQU     0x00
6 GPTRTAG_CODE    EQU     0x80
7
8 ; setup FSR to point to (STK00:STK01)
9 setup_fsr       macro
10         movf    STK01, W
11         movwf   FSR
12         ; select indirectly addressed bank
13         bcf     STATUS, IRP
14         btfsc   STK00, 0
15         bsf     STATUS, IRP
16         endm
17
18 ; increment FSR, update IRP on bank crossings
19 ; FIXME: update IRP if FSR is reset to 0...
20 inc_fsr         macro
21         incf    FSR, F
22         endm
23
24 ; dispatch according to gptr type
25 select_routine  macro   dataptr, codeptr
26         ; __data pointer tag: 0x00
27         xorlw   GPTRTAG_DATA
28         btfsc   STATUS, Z
29         goto    dataptr
30         ; __code pointer tag: 0x80
31         xorlw   (GPTRTAG_DATA ^ GPTRTAG_CODE)
32         btfsc   STATUS, Z
33         goto    codeptr
34         endm
35
36 check_data      macro   dataptr
37         ; __data pointer tag: 0x00
38         xorlw   GPTRTAG_DATA
39         btfsc   STATUS, Z
40         goto    dataptr
41         endm
42