148 lines
4.2 KiB
C
148 lines
4.2 KiB
C
|
/*
|
||
|
(C) Copyright IBM Corp. 2007, 2008
|
||
|
|
||
|
All rights reserved.
|
||
|
|
||
|
Redistribution and use in source and binary forms, with or without
|
||
|
modification, are permitted provided that the following conditions are met:
|
||
|
|
||
|
* Redistributions of source code must retain the above copyright notice,
|
||
|
this list of conditions and the following disclaimer.
|
||
|
* Redistributions in binary form must reproduce the above copyright
|
||
|
notice, this list of conditions and the following disclaimer in the
|
||
|
documentation and/or other materials provided with the distribution.
|
||
|
* Neither the name of IBM nor the names of its contributors may be
|
||
|
used to endorse or promote products derived from this software without
|
||
|
specific prior written permission.
|
||
|
|
||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#ifndef __EA_INTERNAL_H
|
||
|
#define __EA_INTERNAL_H
|
||
|
|
||
|
#include <ea.h>
|
||
|
#define JSRE_POSIX1_SIGNALCODE 0x2101
|
||
|
#define SPE_POSIX1_FTOK 0x05
|
||
|
#define SPE_POSIX1_MMAP 0x0b
|
||
|
#define SPE_POSIX1_MUNMAP 0x0e
|
||
|
/* implemented to here */
|
||
|
#define SPE_POSIX1_MREMAP 0x0c
|
||
|
#define SPE_POSIX1_MSYNC 0x0d
|
||
|
#define SPE_POSIX1_SHMGET 0x14
|
||
|
#define SPE_POSIX1_SHMCTL 0x12
|
||
|
#define SPE_POSIX1_SHMAT 0x11
|
||
|
#define SPE_POSIX1_SHMDT 0x13
|
||
|
#define SPE_POSIX1_SHM_OPEN 0x15
|
||
|
#define SPE_POSIX1_SHM_UNLINK 0x16
|
||
|
|
||
|
#define JSRE_LIBEA_SIGNALCODE 0x2105
|
||
|
#define SPE_LIBEA_CALLOC 0x01
|
||
|
#define SPE_LIBEA_FREE 0x02
|
||
|
#define SPE_LIBEA_MALLOC 0x03
|
||
|
#define SPE_LIBEA_REALLOC 0x04
|
||
|
#define SPE_LIBEA_POSIX_MEMALIGN 0x05
|
||
|
|
||
|
#define PAD_INT 3
|
||
|
#ifdef __EA64__
|
||
|
#define PAD_LONG 2
|
||
|
#else /* 32 bit */
|
||
|
#define PAD_LONG 3
|
||
|
#endif
|
||
|
|
||
|
#define ROUND_UP_NEXT_128(x) (((x) + 128) & (~127))
|
||
|
#define ROUND_DOWN_128(x) ((x) & (~127))
|
||
|
|
||
|
/* Macro that generates an __ea alias. */
|
||
|
#ifdef __EA64__
|
||
|
#define COMPAT_EA_ALIAS(name) asm (".global\t__" #name "64\n\t.set\t__" #name "64," #name)
|
||
|
#else
|
||
|
#define COMPAT_EA_ALIAS(name) asm (".global\t__" #name "32\n\t.set\t__" #name "32," #name)
|
||
|
#endif
|
||
|
|
||
|
static inline __ea void* round_down_128_ea(__ea void* x)
|
||
|
{
|
||
|
size_ea_t tmp = (size_ea_t) x;
|
||
|
tmp &= (~127);
|
||
|
return (__ea void*)tmp;
|
||
|
}
|
||
|
|
||
|
static
|
||
|
inline __ea void* round_up_next_128_ea(__ea void* x)
|
||
|
{
|
||
|
size_ea_t tmp = (size_ea_t) x;
|
||
|
tmp += 128;
|
||
|
tmp &= (~127);
|
||
|
return (__ea void*)tmp;
|
||
|
}
|
||
|
|
||
|
#define __cache_fetch_dirty_all(x) \
|
||
|
__cache_fetch_dirty(round_down_128_ea(x), 128)
|
||
|
|
||
|
/* please optimize, this hurts my eyes */
|
||
|
static inline size_t
|
||
|
three_way_min(size_t x, size_t y, size_t z)
|
||
|
{
|
||
|
if (x < y)
|
||
|
if (x < z)
|
||
|
return x;
|
||
|
else
|
||
|
return z;
|
||
|
else
|
||
|
if (y < z)
|
||
|
return y;
|
||
|
else
|
||
|
return z;
|
||
|
}
|
||
|
|
||
|
#undef eavoid_to_ul
|
||
|
#define eavoid_to_ul(X) ({ \
|
||
|
unsigned long _y; \
|
||
|
__asm__ ("# %0 %1" : "=r" (_y) : "0" (X)); \
|
||
|
_y; \
|
||
|
})
|
||
|
|
||
|
#undef eavoid_to_ull
|
||
|
#define eavoid_to_ull(X) ({ \
|
||
|
unsigned long long _y; \
|
||
|
__asm__ ("# %0 %1" : "=r" (_y) : "0" (X)); \
|
||
|
_y; \
|
||
|
})
|
||
|
|
||
|
#ifdef __EA32__
|
||
|
#undef ull_to_eavoid
|
||
|
#define ull_to_eavoid(X) ({ \
|
||
|
__ea void* _y; \
|
||
|
unsigned long long X2; \
|
||
|
(X2) = (X) << 32;\
|
||
|
__asm__ ("# %0 %1" : "=r" (_y) : "0" (X2)); \
|
||
|
_y; \
|
||
|
})
|
||
|
#else /*__EA64__*/
|
||
|
#define ull_to_eavoid(X) ({ \
|
||
|
__ea void* _y; \
|
||
|
__asm__ ("# %0 %1" : "=r" (_y) : "0" (X)); \
|
||
|
_y; \
|
||
|
})
|
||
|
#endif
|
||
|
|
||
|
#undef ul_to_eavoid
|
||
|
#define ul_to_eavoid(X) ({ \
|
||
|
__ea void* _y; \
|
||
|
__asm__ ("# %0 %1" : "=r" (_y) : "0" (X)); \
|
||
|
_y; \
|
||
|
})
|
||
|
|
||
|
#endif /*__EA_INTERNAL_H*/
|