Revision f4efd166 cpu-all.h
b/cpu-all.h | ||
---|---|---|
233 | 233 |
int val; |
234 | 234 |
__asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (ptr)); |
235 | 235 |
return val; |
236 |
#elif defined(__sparc__) |
|
237 |
#ifndef ASI_PRIMARY_LITTLE |
|
238 |
#define ASI_PRIMARY_LITTLE 0x88 |
|
239 |
#endif |
|
240 |
|
|
241 |
int val; |
|
242 |
__asm__ __volatile__ ("lduha [%1] %2, %0" : "=r" (val) : "r" (ptr), |
|
243 |
"i" (ASI_PRIMARY_LITTLE)); |
|
244 |
return val; |
|
245 | 236 |
#else |
246 | 237 |
uint8_t *p = ptr; |
247 | 238 |
return p[0] | (p[1] << 8); |
... | ... | |
254 | 245 |
int val; |
255 | 246 |
__asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (ptr)); |
256 | 247 |
return (int16_t)val; |
257 |
#elif defined(__sparc__) |
|
258 |
int val; |
|
259 |
__asm__ __volatile__ ("ldsha [%1] %2, %0" : "=r" (val) : "r" (ptr), |
|
260 |
"i" (ASI_PRIMARY_LITTLE)); |
|
261 |
return val; |
|
262 | 248 |
#else |
263 | 249 |
uint8_t *p = ptr; |
264 | 250 |
return (int16_t)(p[0] | (p[1] << 8)); |
... | ... | |
271 | 257 |
int val; |
272 | 258 |
__asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" (ptr)); |
273 | 259 |
return val; |
274 |
#elif defined(__sparc__) |
|
275 |
int val; |
|
276 |
__asm__ __volatile__ ("lduwa [%1] %2, %0" : "=r" (val) : "r" (ptr), |
|
277 |
"i" (ASI_PRIMARY_LITTLE)); |
|
278 |
return val; |
|
279 | 260 |
#else |
280 | 261 |
uint8_t *p = ptr; |
281 | 262 |
return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); |
... | ... | |
284 | 265 |
|
285 | 266 |
static inline uint64_t ldq_le_p(void *ptr) |
286 | 267 |
{ |
287 |
#if defined(__sparc__) |
|
288 |
uint64_t val; |
|
289 |
__asm__ __volatile__ ("ldxa [%1] %2, %0" : "=r" (val) : "r" (ptr), |
|
290 |
"i" (ASI_PRIMARY_LITTLE)); |
|
291 |
return val; |
|
292 |
#else |
|
293 | 268 |
uint8_t *p = ptr; |
294 | 269 |
uint32_t v1, v2; |
295 | 270 |
v1 = ldl_le_p(p); |
296 | 271 |
v2 = ldl_le_p(p + 4); |
297 | 272 |
return v1 | ((uint64_t)v2 << 32); |
298 |
#endif |
|
299 | 273 |
} |
300 | 274 |
|
301 | 275 |
static inline void stw_le_p(void *ptr, int v) |
302 | 276 |
{ |
303 | 277 |
#ifdef __powerpc__ |
304 | 278 |
__asm__ __volatile__ ("sthbrx %1,0,%2" : "=m" (*(uint16_t *)ptr) : "r" (v), "r" (ptr)); |
305 |
#elif defined(__sparc__) |
|
306 |
__asm__ __volatile__ ("stha %1, [%2] %3" : "=m" (*(uint16_t *)ptr) : "r" (v), |
|
307 |
"r" (ptr), "i" (ASI_PRIMARY_LITTLE)); |
|
308 | 279 |
#else |
309 | 280 |
uint8_t *p = ptr; |
310 | 281 |
p[0] = v; |
... | ... | |
316 | 287 |
{ |
317 | 288 |
#ifdef __powerpc__ |
318 | 289 |
__asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr)); |
319 |
#elif defined(__sparc__) |
|
320 |
__asm__ __volatile__ ("stwa %1, [%2] %3" : "=m" (*(uint32_t *)ptr) : "r" (v), |
|
321 |
"r" (ptr), "i" (ASI_PRIMARY_LITTLE)); |
|
322 | 290 |
#else |
323 | 291 |
uint8_t *p = ptr; |
324 | 292 |
p[0] = v; |
... | ... | |
330 | 298 |
|
331 | 299 |
static inline void stq_le_p(void *ptr, uint64_t v) |
332 | 300 |
{ |
333 |
#if defined(__sparc__) |
|
334 |
__asm__ __volatile__ ("stxa %1, [%2] %3" : "=m" (*(uint64_t *)ptr) : "r" (v), |
|
335 |
"r" (ptr), "i" (ASI_PRIMARY_LITTLE)); |
|
336 |
#undef ASI_PRIMARY_LITTLE |
|
337 |
#else |
|
338 | 301 |
uint8_t *p = ptr; |
339 | 302 |
stl_le_p(p, (uint32_t)v); |
340 | 303 |
stl_le_p(p + 4, v >> 32); |
341 |
#endif |
|
342 | 304 |
} |
343 | 305 |
|
344 | 306 |
/* float access */ |
Also available in: Unified diff