diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2005-06-30 12:10:04 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2005-10-29 14:31:34 -0400 |
commit | 7d7ee221213609319401d1b9d6dc4bf22ab928ea (patch) | |
tree | 6e56cdfb5a09584eb01d0c1f74c4f48fc0f50701 | |
parent | 2c93e12cfec8cc668d4a2a2c8576dedabb7c69c8 (diff) |
Prevent 64-bit constants from being cropped to 32 bits when used in C code.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r-- | include/asm-mips/addrspace.h | 80 |
1 files changed, 42 insertions, 38 deletions
diff --git a/include/asm-mips/addrspace.h b/include/asm-mips/addrspace.h index 7dc2619f5006..c806eef41e7f 100644 --- a/include/asm-mips/addrspace.h +++ b/include/asm-mips/addrspace.h | |||
@@ -20,10 +20,12 @@ | |||
20 | #define _ATYPE_ | 20 | #define _ATYPE_ |
21 | #define _ATYPE32_ | 21 | #define _ATYPE32_ |
22 | #define _ATYPE64_ | 22 | #define _ATYPE64_ |
23 | #define _LLCONST_(x) x | ||
23 | #else | 24 | #else |
24 | #define _ATYPE_ __PTRDIFF_TYPE__ | 25 | #define _ATYPE_ __PTRDIFF_TYPE__ |
25 | #define _ATYPE32_ int | 26 | #define _ATYPE32_ int |
26 | #define _ATYPE64_ long long | 27 | #define _ATYPE64_ long long |
28 | #define _LLCONST_(x) x ## LL | ||
27 | #endif | 29 | #endif |
28 | 30 | ||
29 | /* | 31 | /* |
@@ -45,8 +47,9 @@ | |||
45 | /* | 47 | /* |
46 | * Returns the physical address of a CKSEGx / XKPHYS address | 48 | * Returns the physical address of a CKSEGx / XKPHYS address |
47 | */ | 49 | */ |
48 | #define CPHYSADDR(a) ((_ACAST32_ (a)) & 0x1fffffff) | 50 | #define CPHYSADDR(a) ((_ACAST32_(a)) & 0x1fffffff) |
49 | #define XPHYSADDR(a) ((_ACAST64_ (a)) & 0x000000ffffffffff) | 51 | #define XPHYSADDR(a) ((_ACAST64_(a)) & \ |
52 | _LLCONST_(0x000000ffffffffff)) | ||
50 | 53 | ||
51 | #ifdef CONFIG_64BIT | 54 | #ifdef CONFIG_64BIT |
52 | 55 | ||
@@ -55,14 +58,14 @@ | |||
55 | * The compatibility segments use the full 64-bit sign extended value. Note | 58 | * The compatibility segments use the full 64-bit sign extended value. Note |
56 | * the R8000 doesn't have them so don't reference these in generic MIPS code. | 59 | * the R8000 doesn't have them so don't reference these in generic MIPS code. |
57 | */ | 60 | */ |
58 | #define XKUSEG 0x0000000000000000 | 61 | #define XKUSEG _LLCONST_(0x0000000000000000) |
59 | #define XKSSEG 0x4000000000000000 | 62 | #define XKSSEG _LLCONST_(0x4000000000000000) |
60 | #define XKPHYS 0x8000000000000000 | 63 | #define XKPHYS _LLCONST_(0x8000000000000000) |
61 | #define XKSEG 0xc000000000000000 | 64 | #define XKSEG _LLCONST_(0xc000000000000000) |
62 | #define CKSEG0 0xffffffff80000000 | 65 | #define CKSEG0 _LLCONST_(0xffffffff80000000) |
63 | #define CKSEG1 0xffffffffa0000000 | 66 | #define CKSEG1 _LLCONST_(0xffffffffa0000000) |
64 | #define CKSSEG 0xffffffffc0000000 | 67 | #define CKSSEG _LLCONST_(0xffffffffc0000000) |
65 | #define CKSEG3 0xffffffffe0000000 | 68 | #define CKSEG3 _LLCONST_(0xffffffffe0000000) |
66 | 69 | ||
67 | #define CKSEG0ADDR(a) (CPHYSADDR(a) | CKSEG0) | 70 | #define CKSEG0ADDR(a) (CPHYSADDR(a) | CKSEG0) |
68 | #define CKSEG1ADDR(a) (CPHYSADDR(a) | CKSEG1) | 71 | #define CKSEG1ADDR(a) (CPHYSADDR(a) | CKSEG1) |
@@ -120,7 +123,8 @@ | |||
120 | #define PHYS_TO_XKSEG_UNCACHED(p) PHYS_TO_XKPHYS(K_CALG_UNCACHED,(p)) | 123 | #define PHYS_TO_XKSEG_UNCACHED(p) PHYS_TO_XKPHYS(K_CALG_UNCACHED,(p)) |
121 | #define PHYS_TO_XKSEG_CACHED(p) PHYS_TO_XKPHYS(K_CALG_COH_SHAREABLE,(p)) | 124 | #define PHYS_TO_XKSEG_CACHED(p) PHYS_TO_XKPHYS(K_CALG_COH_SHAREABLE,(p)) |
122 | #define XKPHYS_TO_PHYS(p) ((p) & TO_PHYS_MASK) | 125 | #define XKPHYS_TO_PHYS(p) ((p) & TO_PHYS_MASK) |
123 | #define PHYS_TO_XKPHYS(cm,a) (0x8000000000000000 | ((cm)<<59) | (a)) | 126 | #define PHYS_TO_XKPHYS(cm,a) (_LLCONST_(0x8000000000000000) | \ |
127 | ((cm)<<59) | (a)) | ||
124 | 128 | ||
125 | #if defined (CONFIG_CPU_R4300) \ | 129 | #if defined (CONFIG_CPU_R4300) \ |
126 | || defined (CONFIG_CPU_R4X00) \ | 130 | || defined (CONFIG_CPU_R4X00) \ |
@@ -128,46 +132,46 @@ | |||
128 | || defined (CONFIG_CPU_NEVADA) \ | 132 | || defined (CONFIG_CPU_NEVADA) \ |
129 | || defined (CONFIG_CPU_TX49XX) \ | 133 | || defined (CONFIG_CPU_TX49XX) \ |
130 | || defined (CONFIG_CPU_MIPS64) | 134 | || defined (CONFIG_CPU_MIPS64) |
131 | #define KUSIZE 0x0000010000000000 /* 2^^40 */ | 135 | #define KUSIZE _LLCONST_(0x0000010000000000) /* 2^^40 */ |
132 | #define KUSIZE_64 0x0000010000000000 /* 2^^40 */ | 136 | #define KUSIZE_64 _LLCONST_(0x0000010000000000) /* 2^^40 */ |
133 | #define K0SIZE 0x0000001000000000 /* 2^^36 */ | 137 | #define K0SIZE _LLCONST_(0x0000001000000000) /* 2^^36 */ |
134 | #define K1SIZE 0x0000001000000000 /* 2^^36 */ | 138 | #define K1SIZE _LLCONST_(0x0000001000000000) /* 2^^36 */ |
135 | #define K2SIZE 0x000000ff80000000 | 139 | #define K2SIZE _LLCONST_(0x000000ff80000000) |
136 | #define KSEGSIZE 0x000000ff80000000 /* max syssegsz */ | 140 | #define KSEGSIZE _LLCONST_(0x000000ff80000000) /* max syssegsz */ |
137 | #define TO_PHYS_MASK 0x0000000fffffffff /* 2^^36 - 1 */ | 141 | #define TO_PHYS_MASK _LLCONST_(0x0000000fffffffff) /* 2^^36 - 1 */ |
138 | #endif | 142 | #endif |
139 | 143 | ||
140 | #if defined (CONFIG_CPU_R8000) | 144 | #if defined (CONFIG_CPU_R8000) |
141 | /* We keep KUSIZE consistent with R4000 for now (2^^40) instead of (2^^48) */ | 145 | /* We keep KUSIZE consistent with R4000 for now (2^^40) instead of (2^^48) */ |
142 | #define KUSIZE 0x0000010000000000 /* 2^^40 */ | 146 | #define KUSIZE _LLCONST_(0x0000010000000000) /* 2^^40 */ |
143 | #define KUSIZE_64 0x0000010000000000 /* 2^^40 */ | 147 | #define KUSIZE_64 _LLCONST_(0x0000010000000000) /* 2^^40 */ |
144 | #define K0SIZE 0x0000010000000000 /* 2^^40 */ | 148 | #define K0SIZE _LLCONST_(0x0000010000000000) /* 2^^40 */ |
145 | #define K1SIZE 0x0000010000000000 /* 2^^40 */ | 149 | #define K1SIZE _LLCONST_(0x0000010000000000) /* 2^^40 */ |
146 | #define K2SIZE 0x0001000000000000 | 150 | #define K2SIZE _LLCONST_(0x0001000000000000) |
147 | #define KSEGSIZE 0x0000010000000000 /* max syssegsz */ | 151 | #define KSEGSIZE _LLCONST_(0x0000010000000000) /* max syssegsz */ |
148 | #define TO_PHYS_MASK 0x000000ffffffffff /* 2^^40 - 1 */ | 152 | #define TO_PHYS_MASK _LLCONST_(0x000000ffffffffff) /* 2^^40 - 1 */ |
149 | #endif | 153 | #endif |
150 | 154 | ||
151 | #if defined (CONFIG_CPU_R10000) | 155 | #if defined (CONFIG_CPU_R10000) |
152 | #define KUSIZE 0x0000010000000000 /* 2^^40 */ | 156 | #define KUSIZE _LLCONST_(0x0000010000000000) /* 2^^40 */ |
153 | #define KUSIZE_64 0x0000010000000000 /* 2^^40 */ | 157 | #define KUSIZE_64 _LLCONST_(0x0000010000000000) /* 2^^40 */ |
154 | #define K0SIZE 0x0000010000000000 /* 2^^40 */ | 158 | #define K0SIZE _LLCONST_(0x0000010000000000) /* 2^^40 */ |
155 | #define K1SIZE 0x0000010000000000 /* 2^^40 */ | 159 | #define K1SIZE _LLCONST_(0x0000010000000000) /* 2^^40 */ |
156 | #define K2SIZE 0x00000fff80000000 | 160 | #define K2SIZE _LLCONST_(0x00000fff80000000) |
157 | #define KSEGSIZE 0x00000fff80000000 /* max syssegsz */ | 161 | #define KSEGSIZE _LLCONST_(0x00000fff80000000) /* max syssegsz */ |
158 | #define TO_PHYS_MASK 0x000000ffffffffff /* 2^^40 - 1 */ | 162 | #define TO_PHYS_MASK _LLCONST_(0x000000ffffffffff) /* 2^^40 - 1 */ |
159 | #endif | 163 | #endif |
160 | 164 | ||
161 | /* | 165 | /* |
162 | * Further names for SGI source compatibility. These are stolen from | 166 | * Further names for SGI source compatibility. These are stolen from |
163 | * IRIX's <sys/mips_addrspace.h>. | 167 | * IRIX's <sys/mips_addrspace.h>. |
164 | */ | 168 | */ |
165 | #define KUBASE 0 | 169 | #define KUBASE _LLCONST_(0) |
166 | #define KUSIZE_32 0x0000000080000000 /* KUSIZE | 170 | #define KUSIZE_32 _LLCONST_(0x0000000080000000) /* KUSIZE |
167 | for a 32 bit proc */ | 171 | for a 32 bit proc */ |
168 | #define K0BASE_EXL_WR 0xa800000000000000 /* exclusive on write */ | 172 | #define K0BASE_EXL_WR _LLCONST_(0xa800000000000000) /* exclusive on write */ |
169 | #define K0BASE_NONCOH 0x9800000000000000 /* noncoherent */ | 173 | #define K0BASE_NONCOH _LLCONST_(0x9800000000000000) /* noncoherent */ |
170 | #define K0BASE_EXL 0xa000000000000000 /* exclusive */ | 174 | #define K0BASE_EXL _LLCONST_(0xa000000000000000) /* exclusive */ |
171 | 175 | ||
172 | #ifndef CONFIG_CPU_R8000 | 176 | #ifndef CONFIG_CPU_R8000 |
173 | 177 | ||
@@ -176,7 +180,7 @@ | |||
176 | * in order to catch bugs in the source code. | 180 | * in order to catch bugs in the source code. |
177 | */ | 181 | */ |
178 | 182 | ||
179 | #define COMPAT_K1BASE32 0xffffffffa0000000 | 183 | #define COMPAT_K1BASE32 _LLCONST_(0xffffffffa0000000) |
180 | #define PHYS_TO_COMPATK1(x) ((x) | COMPAT_K1BASE32) /* 32-bit compat k1 */ | 184 | #define PHYS_TO_COMPATK1(x) ((x) | COMPAT_K1BASE32) /* 32-bit compat k1 */ |
181 | 185 | ||
182 | #endif | 186 | #endif |