powerpc bugfixes

This commit is contained in:
Joel Dice 2009-05-26 19:30:11 -06:00
parent 2608a2ee43
commit 49a2c1846d

View File

@ -2019,6 +2019,7 @@ class MyAssembler: public Assembler {
int returnAddressSurrogate,
int framePointerSurrogate)
{
if (TailCalls) {
if (offset) {
Register tmp(0);
Memory returnAddressSrc(StackRegister, 8 + (footprint * BytesPerWord));
@ -2050,6 +2051,9 @@ class MyAssembler: public Assembler {
} else {
popFrame();
}
} else {
abort(&c);
}
}
virtual void popFrameAndPopArgumentsAndReturn(unsigned argumentFootprint) {
@ -2058,7 +2062,7 @@ class MyAssembler: public Assembler {
assert(&c, argumentFootprint >= StackAlignmentInWords);
assert(&c, (argumentFootprint % StackAlignmentInWords) == 0);
if (argumentFootprint > StackAlignmentInWords) {
if (TailCalls and argumentFootprint > StackAlignmentInWords) {
Register tmp(0);
Memory stackSrc(StackRegister, 0);
moveMR(&c, BytesPerWord, &stackSrc, BytesPerWord, &tmp);
@ -2072,16 +2076,17 @@ class MyAssembler: public Assembler {
return_(&c);
}
virtual void popFrameAndUpdateStackAndReturn(unsigned stackOffset) {
virtual void popFrameAndUpdateStackAndReturn(unsigned stackOffsetFromThread)
{
popFrame();
Register tmp1(0);
Memory stackSrc(StackRegister, 0);
moveMR(&c, BytesPerWord, &stackSrc, BytesPerWord, &tmp1);
Register tmp2(arch_->returnLow());
Memory newStackSrc(ThreadRegister, stackOffset);
moveMR(&c, BytesPerWord, &stackSrc, BytesPerWord, &tmp2);
Register tmp2(5);
Memory newStackSrc(ThreadRegister, stackOffsetFromThread);
moveMR(&c, BytesPerWord, &newStackSrc, BytesPerWord, &tmp2);
Register stack(StackRegister);
subR(&c, BytesPerWord, &tmp2, &stack, &tmp2);