mirror of
https://github.com/corda/corda.git
synced 2025-01-06 05:04:20 +00:00
powerpc bugfixes
This commit is contained in:
parent
9ba71cf508
commit
98275e175e
@ -785,6 +785,10 @@ class Context {
|
|||||||
{
|
{
|
||||||
if (size == 8) {
|
if (size == 8) {
|
||||||
switch(op) {
|
switch(op) {
|
||||||
|
case Absolute:
|
||||||
|
assert(t, resultSize == 8);
|
||||||
|
return local::getThunk(t, absoluteLongThunk);
|
||||||
|
|
||||||
case FloatNegate:
|
case FloatNegate:
|
||||||
assert(t, resultSize == 8);
|
assert(t, resultSize == 8);
|
||||||
return local::getThunk(t, negateDoubleThunk);
|
return local::getThunk(t, negateDoubleThunk);
|
||||||
@ -819,12 +823,16 @@ class Context {
|
|||||||
assert(t, size == 4);
|
assert(t, size == 4);
|
||||||
|
|
||||||
switch(op) {
|
switch(op) {
|
||||||
|
case Absolute:
|
||||||
|
assert(t, resultSize == 4);
|
||||||
|
return local::getThunk(t, absoluteIntThunk);
|
||||||
|
|
||||||
case FloatNegate:
|
case FloatNegate:
|
||||||
assert(t, size == 4);
|
assert(t, resultSize == 4);
|
||||||
return local::getThunk(t, negateFloatThunk);
|
return local::getThunk(t, negateFloatThunk);
|
||||||
|
|
||||||
case FloatAbsolute:
|
case FloatAbsolute:
|
||||||
assert(t, size == 4);
|
assert(t, resultSize == 4);
|
||||||
return local::getThunk(t, absoluteFloatThunk);
|
return local::getThunk(t, absoluteFloatThunk);
|
||||||
|
|
||||||
case Float2Float:
|
case Float2Float:
|
||||||
@ -2160,6 +2168,18 @@ absoluteFloat(uint32_t a)
|
|||||||
return floatToBits(fabsf(bitsToFloat(a)));
|
return floatToBits(fabsf(bitsToFloat(a)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
absoluteLong(int64_t a)
|
||||||
|
{
|
||||||
|
return a > 0 ? a : -a;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
absoluteInt(int32_t a)
|
||||||
|
{
|
||||||
|
return a > 0 ? a : -a;
|
||||||
|
}
|
||||||
|
|
||||||
int64_t
|
int64_t
|
||||||
divideLong(int64_t b, int64_t a)
|
divideLong(int64_t b, int64_t a)
|
||||||
{
|
{
|
||||||
|
@ -2065,6 +2065,9 @@ class MyArchitecture: public Assembler::Architecture {
|
|||||||
*aTypeMask = (1 << RegisterOperand);
|
*aTypeMask = (1 << RegisterOperand);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Absolute:
|
||||||
|
case FloatAbsolute:
|
||||||
|
case FloatSquareRoot:
|
||||||
case FloatNegate:
|
case FloatNegate:
|
||||||
case Float2Float:
|
case Float2Float:
|
||||||
case Float2Int:
|
case Float2Int:
|
||||||
@ -2096,9 +2099,9 @@ class MyArchitecture: public Assembler::Architecture {
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual void planMove
|
virtual void planMove
|
||||||
(unsigned size, uint8_t* srcTypeMask, uint64_t* srcRegisterMask,
|
(unsigned, uint8_t* srcTypeMask, uint64_t* srcRegisterMask,
|
||||||
uint8_t* tmpTypeMask, uint64_t* tmpRegisterMask,
|
uint8_t* tmpTypeMask, uint64_t* tmpRegisterMask,
|
||||||
uint8_t dstTypeMask, uint64_t dstRegisterMask)
|
uint8_t dstTypeMask, uint64_t)
|
||||||
{
|
{
|
||||||
*srcTypeMask = ~0;
|
*srcTypeMask = ~0;
|
||||||
*srcRegisterMask = ~static_cast<uint64_t>(0);
|
*srcRegisterMask = ~static_cast<uint64_t>(0);
|
||||||
|
@ -122,7 +122,7 @@ atomicCompareAndSwap32(uint32_t* p, uint32_t old, uint32_t new_)
|
|||||||
inline bool
|
inline bool
|
||||||
atomicCompareAndSwap(uintptr_t* p, uintptr_t old, uintptr_t new_)
|
atomicCompareAndSwap(uintptr_t* p, uintptr_t old, uintptr_t new_)
|
||||||
{
|
{
|
||||||
return atomicCompareAndSwap32(p, old, new_);
|
return atomicCompareAndSwap32(reinterpret_cast<uint32_t*>(p), old, new_);
|
||||||
}
|
}
|
||||||
#endif // USE_ATOMIC_OPERATIONS
|
#endif // USE_ATOMIC_OPERATIONS
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@ THUNK(divideFloat)
|
|||||||
THUNK(moduloFloat)
|
THUNK(moduloFloat)
|
||||||
THUNK(negateFloat)
|
THUNK(negateFloat)
|
||||||
THUNK(absoluteFloat)
|
THUNK(absoluteFloat)
|
||||||
|
THUNK(absoluteLong)
|
||||||
|
THUNK(absoluteInt)
|
||||||
THUNK(divideLong)
|
THUNK(divideLong)
|
||||||
THUNK(divideInt)
|
THUNK(divideInt)
|
||||||
THUNK(moduloLong)
|
THUNK(moduloLong)
|
||||||
|
Loading…
Reference in New Issue
Block a user