No empty .Rs/.Re
[netbsd-mini2440.git] / sys / arch / alpha / stand / common / prom_disp.S
blobe2bc27a764182fb94573d1eac9ff7f5a71ba54e5
1 /* $NetBSD: prom_disp.S,v 1.1 1997/01/24 01:52:58 cgd Exp $ */
3 /*
4  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
5  * All rights reserved.
6  *
7  * Author: Chris G. Demetriou
8  * 
9  * Permission to use, copy, modify and distribute this software and
10  * its documentation is hereby granted, provided that both the copyright
11  * notice and this permission notice appear in all copies of the
12  * software, derivative works or modified versions, and any portions
13  * thereof, and that both notices appear in supporting documentation.
14  * 
15  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
16  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
17  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
18  * 
19  * Carnegie Mellon requests users of this software to return to
20  *
21  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
22  *  School of Computer Science
23  *  Carnegie Mellon University
24  *  Pittsburgh PA 15213-3890
25  *
26  * any improvements or extensions that they make and grant Carnegie the
27  * rights to redistribute these changes.
28  */
30 #ifndef _LOCORE
31 #include "include/asm.h"
32 #include "include/prom.h"
33 #include "include/rpb.h"
34 #endif
36         .globl  prom_dispatch_v
37         .comm   prom_dispatch_v,16
39         .text
40         .align  4
43  * Dispatcher routine.  Implements prom's calling machinery, saves our
44  * callee-saved registers as required by C.
45  */
46 #define D_RA                     (7*8)
47 #define D_S0                     (8*8)
48 #define D_S1                     (9*8)
49 #define D_S2                    (10*8)
50 #define D_S3                    (11*8)
51 #define D_S4                    (12*8)
52 #define D_S5                    (13*8)
53 #define D_S6                    (14*8)
54 #define DISPATCH_FRAME_SIZE     (15*8)
55 #define DISPATCH_REGS           IM_RA|IM_S0|IM_S1|IM_S2|IM_S3|IM_S4|IM_S5|IM_S6
57 NESTED(prom_dispatch, 5, DISPATCH_FRAME_SIZE, ra, DISPATCH_REGS, 0)
58         LDGP(pv)
60         lda     sp, -DISPATCH_FRAME_SIZE(sp)
61         stq     ra, D_RA(sp)
62         stq     s0, D_S0(sp)
63         stq     s1, D_S1(sp)
64         stq     s2, D_S2(sp)
65         stq     s3, D_S3(sp)
66         stq     s4, D_S4(sp)
67         stq     s5, D_S5(sp)
68         stq     s6, D_S6(sp)
70         /* Lord have mercy because.. I would not. */
71 /* #define      STUPID_PROM_IS_32_BITS */
72 #ifdef  STUPID_PROM_IS_32_BITS
73         ldah    s0, 0x2000(zero)        /* hack for hack */
74         lda     s0, (0x2000-8)(s0)
76         stq     sp, 0(s0)
77         or      s0, zero, sp
78 #endif  /* STUPID_PROM_IS_32_BITS */
80         lda     pv, prom_dispatch_v
81         ldq     v0, 0(pv)               /* routine */
82         ldq     pv, 8(pv)               /* routine_arg */
83         
84         jsr     ra, (v0)
86 #ifdef  STUPID_PROM_IS_32_BITS
87         ldah    s0, 0x2000(zero)        /* hack for hack */
88         lda     s0, (0x2000-8)(s0)
90         ldq     sp, 0(s0)
91 #endif  /* STUPID_PROM_IS_32_BITS */
93         ldq     ra, D_RA(sp)
94         ldq     s0, D_S0(sp)
95         ldq     s1, D_S1(sp)
96         ldq     s2, D_S2(sp)
97         ldq     s3, D_S3(sp)
98         ldq     s4, D_S4(sp)
99         ldq     s5, D_S5(sp)
100         ldq     s6, D_S6(sp)
101         lda     sp, DISPATCH_FRAME_SIZE(sp)
102         RET
103 END(prom_dispatch)
105 #undef  D_RA                    
106 #undef  D_S0                    
107 #undef  D_S1                    
108 #undef  D_S2                    
109 #undef  D_S3                    
110 #undef  D_S4                    
111 #undef  D_S5                    
112 #undef  D_S6                    
113 #undef  DISPATCH_FRAME_SIZE
114 #undef  DISPATCH_REGS