~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-parisc/assembly.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (C) 1999 Hewlett-Packard (Frank Rowand)
  3  * Copyright (C) 1999 Philipp Rumpf <prumpf@tux.org>
  4  * Copyright (C) 1999 SuSE GmbH
  5  *
  6  *    This program is free software; you can redistribute it and/or modify
  7  *    it under the terms of the GNU General Public License as published by
  8  *    the Free Software Foundation; either version 2, or (at your option)
  9  *    any later version.
 10  *
 11  *    This program is distributed in the hope that it will be useful,
 12  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14  *    GNU General Public License for more details.
 15  *
 16  *    You should have received a copy of the GNU General Public License
 17  *    along with this program; if not, write to the Free Software
 18  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 19  */
 20 
 21 #ifndef _PARISC_ASSEMBLY_H
 22 #define _PARISC_ASSEMBLY_H
 23 
 24 #if defined(__LP64__) && defined(__ASSEMBLY__)
 25 /* the 64-bit pa gnu assembler unfortunately defaults to .level 1.1 or 2.0 so
 26  * work around that for now... */
 27         .level 2.0w
 28 #endif
 29 
 30 #include <asm/offset.h>
 31 #include <asm/page.h>
 32 
 33 #include <asm/asmregs.h>
 34 
 35         sp      =       30
 36         gp      =       27
 37         ipsw    =       22
 38 
 39 #if __PAGE_OFFSET == 0xc0000000
 40         .macro  tophys  gr
 41         zdep    \gr, 31, 30, \gr
 42         .endm
 43         
 44         .macro  tovirt  gr
 45         depi    3,1,2,\gr
 46         .endm
 47 #else
 48 #error  unknown __PAGE_OFFSET
 49 #endif
 50 
 51         .macro delay value
 52         ldil    L%\value, 1
 53         ldo     R%\value(1), 1
 54         addib,UV,n -1,1,.
 55         addib,NUV,n -1,1,.+8
 56         nop
 57         .endm
 58 
 59         .macro  debug value
 60         .endm
 61 
 62 #ifdef __LP64__
 63 # define LDIL_FIXUP(reg) depdi 0,31,32,reg
 64 #else
 65 # define LDIL_FIXUP(reg)
 66 #endif
 67 
 68         /* load 32-bit 'value' into 'reg' compensating for the ldil
 69          * sign-extension when running in wide mode.
 70          * WARNING!! neither 'value' nor 'reg' can be expressions
 71          * containing '.'!!!! */
 72         .macro  load32 value, reg
 73         ldil    L%\value, \reg
 74         ldo     R%\value(\reg), \reg
 75         LDIL_FIXUP(\reg)
 76         .endm
 77 
 78 #ifdef __LP64__
 79 #define LDREG   ldd
 80 #define STREG   std
 81 #define RP_OFFSET       16
 82 #else
 83 #define LDREG   ldw
 84 #define STREG   stw
 85 #define RP_OFFSET       20
 86 #endif
 87 
 88         .macro loadgp
 89 #ifdef __LP64__
 90         ldil            L%__gp, %r27
 91         ldo             R%__gp(%r27), %r27
 92         LDIL_FIXUP(%r27)
 93 #else
 94         ldil            L%$global$, %r27
 95         ldo             R%$global$(%r27), %r27
 96 #endif
 97         .endm
 98 
 99 #define SAVE_SP(r, where) mfsp r, %r1 ! STREG %r1, where
100 #define REST_SP(r, where) LDREG where, %r1 ! mtsp %r1, r
101 #define SAVE_CR(r, where) mfctl r, %r1 ! STREG %r1, where
102 #define REST_CR(r, where) LDREG where, %r1 ! mtctl %r1, r
103 
104         .macro  save_general    regs
105         STREG %r2, PT_GR2 (\regs)
106         STREG %r3, PT_GR3 (\regs)
107         STREG %r4, PT_GR4 (\regs)
108         STREG %r5, PT_GR5 (\regs)
109         STREG %r6, PT_GR6 (\regs)
110         STREG %r7, PT_GR7 (\regs)
111         STREG %r8, PT_GR8 (\regs)
112         STREG %r9, PT_GR9 (\regs)
113         STREG %r10, PT_GR10(\regs)
114         STREG %r11, PT_GR11(\regs)
115         STREG %r12, PT_GR12(\regs)
116         STREG %r13, PT_GR13(\regs)
117         STREG %r14, PT_GR14(\regs)
118         STREG %r15, PT_GR15(\regs)
119         STREG %r16, PT_GR16(\regs)
120         STREG %r17, PT_GR17(\regs)
121         STREG %r18, PT_GR18(\regs)
122         STREG %r19, PT_GR19(\regs)
123         STREG %r20, PT_GR20(\regs)
124         STREG %r21, PT_GR21(\regs)
125         STREG %r22, PT_GR22(\regs)
126         STREG %r23, PT_GR23(\regs)
127         STREG %r24, PT_GR24(\regs)
128         STREG %r25, PT_GR25(\regs)
129         /* r26 is clobbered by cr19 and assumed to be saved before hand */
130         STREG %r27, PT_GR27(\regs)
131         STREG %r28, PT_GR28(\regs)
132         /* r29 is already saved and points to PT_xxx struct */
133         /* r30 stack pointer saved in get_stack */
134         STREG %r31, PT_GR31(\regs)
135         .endm
136 
137         .macro  rest_general    regs
138         LDREG PT_GR2 (\regs), %r2
139         LDREG PT_GR3 (\regs), %r3
140         LDREG PT_GR4 (\regs), %r4
141         LDREG PT_GR5 (\regs), %r5
142         LDREG PT_GR6 (\regs), %r6
143         LDREG PT_GR7 (\regs), %r7
144         LDREG PT_GR8 (\regs), %r8
145         LDREG PT_GR9 (\regs), %r9
146         LDREG PT_GR10(\regs), %r10
147         LDREG PT_GR11(\regs), %r11
148         LDREG PT_GR12(\regs), %r12
149         LDREG PT_GR13(\regs), %r13
150         LDREG PT_GR14(\regs), %r14
151         LDREG PT_GR15(\regs), %r15
152         LDREG PT_GR16(\regs), %r16
153         LDREG PT_GR17(\regs), %r17
154         LDREG PT_GR18(\regs), %r18
155         LDREG PT_GR19(\regs), %r19
156         LDREG PT_GR20(\regs), %r20
157         LDREG PT_GR21(\regs), %r21
158         LDREG PT_GR22(\regs), %r22
159         LDREG PT_GR23(\regs), %r23
160         LDREG PT_GR24(\regs), %r24
161         LDREG PT_GR25(\regs), %r25
162         LDREG PT_GR26(\regs), %r26
163         LDREG PT_GR27(\regs), %r27
164         LDREG PT_GR28(\regs), %r28
165         /* r30 stack pointer restored in rest_stack */
166         LDREG PT_GR31(\regs), %r31
167         .endm
168 
169         .macro  save_fp         regs
170         fstd,ma  %fr0, 8(\regs)
171         fstd,ma  %fr1, 8(\regs)
172         fstd,ma  %fr2, 8(\regs)
173         fstd,ma  %fr3, 8(\regs)
174         fstd,ma  %fr4, 8(\regs)
175         fstd,ma  %fr5, 8(\regs)
176         fstd,ma  %fr6, 8(\regs)
177         fstd,ma  %fr7, 8(\regs)
178         fstd,ma  %fr8, 8(\regs)
179         fstd,ma  %fr9, 8(\regs)
180         fstd,ma %fr10, 8(\regs)
181         fstd,ma %fr11, 8(\regs)
182         fstd,ma %fr12, 8(\regs)
183         fstd,ma %fr13, 8(\regs)
184         fstd,ma %fr14, 8(\regs)
185         fstd,ma %fr15, 8(\regs)
186         fstd,ma %fr16, 8(\regs)
187         fstd,ma %fr17, 8(\regs)
188         fstd,ma %fr18, 8(\regs)
189         fstd,ma %fr19, 8(\regs)
190         fstd,ma %fr20, 8(\regs)
191         fstd,ma %fr21, 8(\regs)
192         fstd,ma %fr22, 8(\regs)
193         fstd,ma %fr23, 8(\regs)
194         fstd,ma %fr24, 8(\regs)
195         fstd,ma %fr25, 8(\regs)
196         fstd,ma %fr26, 8(\regs)
197         fstd,ma %fr27, 8(\regs)
198         fstd,ma %fr28, 8(\regs)
199         fstd,ma %fr29, 8(\regs)
200         fstd,ma %fr30, 8(\regs)
201         fstd    %fr31, 0(\regs)
202         .endm
203 
204         .macro  rest_fp         regs
205         fldd    0(\regs),        %fr31
206         fldd,mb -8(\regs),       %fr30
207         fldd,mb -8(\regs),       %fr29
208         fldd,mb -8(\regs),       %fr28
209         fldd,mb -8(\regs),       %fr27
210         fldd,mb -8(\regs),       %fr26
211         fldd,mb -8(\regs),       %fr25
212         fldd,mb -8(\regs),       %fr24
213         fldd,mb -8(\regs),       %fr23
214         fldd,mb -8(\regs),       %fr22
215         fldd,mb -8(\regs),       %fr21
216         fldd,mb -8(\regs),       %fr20
217         fldd,mb -8(\regs),       %fr19
218         fldd,mb -8(\regs),       %fr18
219         fldd,mb -8(\regs),       %fr17
220         fldd,mb -8(\regs),       %fr16
221         fldd,mb -8(\regs),       %fr15
222         fldd,mb -8(\regs),       %fr14
223         fldd,mb -8(\regs),       %fr13
224         fldd,mb -8(\regs),       %fr12
225         fldd,mb -8(\regs),       %fr11
226         fldd,mb -8(\regs),       %fr10
227         fldd,mb -8(\regs),       %fr9
228         fldd,mb -8(\regs),       %fr8
229         fldd,mb -8(\regs),       %fr7
230         fldd,mb -8(\regs),       %fr6
231         fldd,mb -8(\regs),       %fr5
232         fldd,mb -8(\regs),       %fr4
233         fldd,mb -8(\regs),       %fr3
234         fldd,mb -8(\regs),       %fr2
235         fldd,mb -8(\regs),       %fr1
236         fldd,mb -8(\regs),       %fr0
237         .endm
238 
239 #ifdef __LP64__
240         .macro  callee_save
241         ldo     144(%r30), %r30
242         std       %r3,  -144(%r30)
243         std       %r4,  -136(%r30)
244         std       %r5,  -128(%r30)
245         std       %r6,  -120(%r30)
246         std       %r7,  -112(%r30)
247         std       %r8,  -104(%r30)
248         std       %r9,   -96(%r30)
249         std      %r10,   -88(%r30)
250         std      %r11,   -80(%r30)
251         std      %r12,   -72(%r30)
252         std      %r13,   -64(%r30)
253         std      %r14,   -56(%r30)
254         std      %r15,   -48(%r30)
255         std      %r16,   -40(%r30)
256         std      %r17,   -32(%r30)
257         std      %r18,   -24(%r30)
258         .endm
259 
260         .macro  callee_rest
261         ldd      -24(%r30),   %r18
262         ldd      -32(%r30),   %r17
263         ldd      -40(%r30),   %r16
264         ldd      -48(%r30),   %r15
265         ldd      -56(%r30),   %r14
266         ldd      -64(%r30),   %r13
267         ldd      -72(%r30),   %r12
268         ldd      -80(%r30),   %r11
269         ldd      -88(%r30),   %r10
270         ldd      -96(%r30),    %r9
271         ldd     -104(%r30),    %r8
272         ldd     -112(%r30),    %r7
273         ldd     -120(%r30),    %r6
274         ldd     -128(%r30),    %r5
275         ldd     -136(%r30),    %r4
276         ldd     -144(%r30),    %r3
277         ldo     -144(%r30),   %r30
278         .endm
279 
280 #else /* __LP64__ */
281 
282         .macro  callee_save
283         ldo     128(30), 30
284         stw      3,     -128(30)
285         stw      4,     -124(30)
286         stw      5,     -120(30)
287         stw      6,     -116(30)
288         stw      7,     -112(30)
289         stw      8,     -108(30)
290         stw      9,     -104(30)
291         stw      10,    -100(30)
292         stw      11,     -96(30)
293         stw      12,     -92(30)
294         stw      13,     -88(30)
295         stw      14,     -84(30)
296         stw      15,     -80(30)
297         stw      16,     -76(30)
298         stw      17,     -72(30)
299         stw      18,     -68(30)
300         .endm
301 
302         .macro  callee_rest
303         ldw      -68(30),   18
304         ldw      -72(30),   17
305         ldw      -76(30),   16
306         ldw      -80(30),   15
307         ldw      -84(30),   14
308         ldw      -88(30),   13
309         ldw      -92(30),   12
310         ldw      -96(30),   11
311         ldw     -100(30),   10
312         ldw     -104(30),    9
313         ldw     -108(30),    8
314         ldw     -112(30),    7
315         ldw     -116(30),    6
316         ldw     -120(30),    5
317         ldw     -124(30),    4
318         ldw     -128(30),    3
319         ldo     -128(30),   30
320         .endm
321 #endif /* __LP64__ */
322 
323         .macro  save_specials   regs
324 
325         SAVE_SP  (%sr0, PT_SR0 (\regs))
326         SAVE_SP  (%sr1, PT_SR1 (\regs))
327         SAVE_SP  (%sr2, PT_SR2 (\regs))
328         SAVE_SP  (%sr3, PT_SR3 (\regs))
329         SAVE_SP  (%sr4, PT_SR4 (\regs))
330         SAVE_SP  (%sr5, PT_SR5 (\regs))
331         SAVE_SP  (%sr6, PT_SR6 (\regs))
332         SAVE_SP  (%sr7, PT_SR7 (\regs))
333 
334         SAVE_CR  (%cr17, PT_IASQ0(\regs))
335         mtctl    %r0,   %cr17
336         SAVE_CR  (%cr17, PT_IASQ1(\regs))
337 
338         SAVE_CR  (%cr18, PT_IAOQ0(\regs))
339         mtctl    %r0,   %cr18
340         SAVE_CR  (%cr18, PT_IAOQ1(\regs))
341 
342         SAVE_CR  (%cr11, PT_SAR  (\regs))
343         SAVE_CR  (%cr22, PT_PSW  (\regs))
344         SAVE_CR  (%cr19, PT_IIR  (\regs))
345         SAVE_CR  (%cr28, PT_GR1  (\regs))
346         SAVE_CR  (%cr31, PT_GR29 (\regs))
347 
348         STREG   %r26,   PT_GR26 (\regs)
349         mfctl   %cr29,  %r26
350         .endm
351 
352         .macro  rest_specials   regs
353 
354         REST_SP  (%sr0, PT_SR0 (\regs))
355         REST_SP  (%sr1, PT_SR1 (\regs))
356         REST_SP  (%sr2, PT_SR2 (\regs))
357         REST_SP  (%sr3, PT_SR3 (\regs))
358         REST_SP  (%sr4, PT_SR4 (\regs))
359         REST_SP  (%sr5, PT_SR5 (\regs))
360         REST_SP  (%sr6, PT_SR6 (\regs))
361         REST_SP  (%sr7, PT_SR7 (\regs))
362 
363         REST_CR (%cr17, PT_IASQ0(\regs))
364         REST_CR (%cr17, PT_IASQ1(\regs))
365 
366         REST_CR (%cr18, PT_IAOQ0(\regs))
367         REST_CR (%cr18, PT_IAOQ1(\regs))
368 
369         REST_CR (%cr11, PT_SAR  (\regs))
370 
371         REST_CR (%cr22, PT_PSW  (\regs))
372         .endm
373 
374 #endif
375 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.