Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / include / arch / ppc / asmdefs.h
1 /*   -*- asm -*-
2  *
3  *   Creation Date: <2001/02/03 19:38:07 samuel>
4  *   Time-stamp: <2003/07/08 18:55:50 samuel>
5  *
6  *      <asmdefs.h>
7  *
8  *      Common assembly definitions
9  *
10  *   Copyright (C) 2001, 2002, 2003 Samuel Rydh (samuel@ibrium.se)
11  *
12  *   This program is free software; you can redistribute it and/or
13  *   modify it under the terms of the GNU General Public License
14  *   as published by the Free Software Foundation
15  *
16  */
17
18 #ifndef _H_ASMDEFS
19 #define _H_ASMDEFS
20
21 /************************************************************************/
22 /*      High/low halfword compatibility macros                          */
23 /************************************************************************/
24
25 #ifndef __darwin__
26 #define         ha16( v )       (v)##@ha
27 #define         hi16( v )       (v)##@h
28 #define         lo16( v )       (v)##@l
29 #endif
30 #define         HA(v)           ha16(v)
31 #define         HI(v)           hi16(v)
32 #define         LO(v)           lo16(v)
33
34 /* from Linux: include/asm-powerpc/ppc_asm.h */
35 /*
36  * Copyright (C) 1995-1999 Gary Thomas, Paul Mackerras, Cort Dougan.
37  */
38
39 /* General Purpose Registers (GPRs) */
40
41 #define r0      0
42 #define r1      1
43 #define r2      2
44 #define r3      3
45 #define r4      4
46 #define r5      5
47 #define r6      6
48 #define r7      7
49 #define r8      8
50 #define r9      9
51 #define r10     10
52 #define r11     11
53 #define r12     12
54 #define r13     13
55 #define r14     14
56 #define r15     15
57 #define r16     16
58 #define r17     17
59 #define r18     18
60 #define r19     19
61 #define r20     20
62 #define r21     21
63 #define r22     22
64 #define r23     23
65 #define r24     24
66 #define r25     25
67 #define r26     26
68 #define r27     27
69 #define r28     28
70 #define r29     29
71 #define r30     30
72 #define r31     31
73
74 /************************************************************************/
75 /*      MISC                                                            */
76 /************************************************************************/
77
78 #ifdef __powerpc64__
79
80 #define LOAD_REG_IMMEDIATE(D, x) \
81         lis  (D),      (x)@highest ; \
82         ori  (D), (D), (x)@higher ; \
83         sldi (D), (D), 32 ; \
84         oris (D), (D), (x)@h ; \
85         ori  (D), (D), (x)@l
86
87 #define LOAD_REG_FUNC(D, x) \
88     LOAD_REG_IMMEDIATE((D), (x)) ; \
89     ld (D), 0(D)
90
91 #else
92
93 #define LOAD_REG_IMMEDIATE(D, x) \
94         lis  (D),      HA(x) ; \
95         addi (D), (D), LO(x)
96
97 #define LOAD_REG_FUNC(D, x) \
98     LOAD_REG_IMMEDIATE((D), (x))
99
100 #endif
101
102 #ifdef __powerpc64__
103 #define PPC_LL   ld
104 #define PPC_STL  std
105 #define PPC_STLU stdu
106 #define RFI rfid
107 #define MTMSRD(r) mtmsrd r
108 #define DATA_LONG(x) .quad x
109 #define BRANCH_LABEL(name) . ## name
110 #define PPC_LR_STKOFF 16
111 #else
112 #define PPC_LL   lwz
113 #define PPC_STL  stw
114 #define PPC_STLU stwu
115 #define RFI rfi
116 #define MTMSRD(r) mtmsr  r
117 #define DATA_LONG(x) .long x
118 #define BRANCH_LABEL(name) name
119 #define PPC_LR_STKOFF 4
120 #endif
121
122 #ifndef __darwin__
123 #define GLOBL( name )           .globl name ; name
124 #define EXTERN( name )          name
125 #else
126 /* an underscore is needed on Darwin */
127 #define GLOBL( name )           .globl _##name ; name: ; _##name
128 #define EXTERN( name )          _##name
129 #endif
130
131 #if defined(__powerpc64__) && !defined(__darwin__)
132 #define _GLOBAL(name) \
133         .align 2 ; \
134         .section ".opd", "aw" ; \
135         .globl name ; \
136         .globl .##name ; \
137     name: \
138         .quad .##name ; \
139         .quad .TOC.@tocbase ; \
140         .quad 0 ; \
141         .previous ; \
142         .type .##name, @function ; \
143     .##name
144 #else
145 #define _GLOBAL(name) \
146     GLOBL(name)
147 #endif
148
149 #define BIT(n)          (1<<(31-(n)))
150
151 #endif   /* _H_ASMDEFS */