OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.20.1/] [ld/] [testsuite/] [ld-m68hc11/] [far-hc11.s] - Blame information for rev 394

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 205 julius
;;; Test 68HC11 FAR trampoline generation
2
;;; 2 trampolines are generated:
3
;;; - one for '_far_bar'
4
;;; - one for '_far_foo'
5
;;; 'far_no_tramp' does not have any trampoline generated.
6
;;;
7
        .sect .text
8
        .globl _start
9
_start:
10
start:
11
        lds     #stack
12
        ldx     #0xabcd
13
        pshx
14
        ldd     #0x1234
15
        ldx     #0x5678
16
        bsr     _far_bar        ; Call to trampoline generated code
17
        cpx     #0x1234
18
        bne     fail            ; X and D preserved (swapped by _far_bar)
19
        cpd     #0x5678
20
        bne     fail
21
        pulx
22
        cpx     #0xabcd         ; Stack parameter preserved
23
        bne     fail
24
        ldd     #_far_foo       ; Get address of trampoline handler
25
        xgdx
26
        jsr     0,x
27
        ldd     #_far_bar       ; Likewise (unique trampoline check)
28
        xgdy
29
        jsr     0,y
30
        ldaa    #%page(_far_no_tramp)
31
        ldy     #%addr(_far_no_tramp)
32
        bsr     __call_a16      ; No trampoline generated for _far_no_tramp
33
        clra
34
        clrb
35
        wai
36
fail:
37
        ldd     #1
38
        wai
39
        bra     start
40
        .global __return
41
__return:
42
        ins
43
        rts
44
 
45
        .sect .bank1,"ax"
46
        .globl _far_bar
47
        .far _far_bar           ; Must mark symbol as far
48
_far_bar:
49
        jsr     local_bank1
50
        xgdx
51
        jmp     __return
52
 
53
local_bank1:
54
        rts
55
 
56
        .sect .bank2,"ax"
57
        .globl _far_foo
58
        .far _far_foo
59
_far_foo:
60
        jsr     local_bank2
61
        jmp     __return
62
 
63
local_bank2:
64
        rts
65
 
66
        .sect .bank3,"ax"
67
        .globl _far_no_tramp
68
        .far _far_no_tramp
69
_far_no_tramp:
70
        jsr     local_bank3
71
        jmp     __return
72
 
73
local_bank3:
74
        rts
75
 
76
        .sect .text
77
        .globl __far_trampoline
78
__far_trampoline:
79
        psha                            ; (2) Save function parameter (high)
80
        ;; <Read current page in A>
81
        psha                            ; (2)
82
        ;; <Set currenge page from B>
83
        pshx                            ; (4)
84
        tsx                             ; (3)
85
        ldab    4,x                     ; (4) Restore function parameter (low)
86
        ldaa    2,x                     ; (4) Get saved page number
87
        staa    4,x                     ; (4) Save it below return PC
88
        pulx                            ; (5)
89
        pula                            ; (3)
90
        pula                            ; (3) Restore function parameter (high)
91
        jmp     0,y                      ; (4)
92
 
93
        .globl __call_a16
94
__call_a16:
95
        ;; xgdx                         ; (3)
96
        ;; <Read current page in A>     ; (3) ldaa _current_page
97
        psha                            ; (2)
98
        ;; <Set current page from B>    ; (4) staa _current_page
99
        ;; xgdx                         ; (3)
100
        jmp 0,y                          ; (4)
101
 
102
        .sect .page0
103
        .skip 100
104
stack:
105
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.