Backed out changeset d62d5b78e234 (bug 1316803) for arm64 bustage a=backout

This commit is contained in:
Wes Kocher 2016-11-29 14:57:43 -08:00
Родитель 1ef4ddc756
Коммит 618e4c1734
2 изменённых файлов: 90 добавлений и 203 удалений

Просмотреть файл

@ -206,8 +206,6 @@ assertEq(testTrunc(13.37), 1);
testBinary64('rotl', "0x1234567812345678", 4, "0x2345678123456781");
testBinary64('rotl', "0x1234567812345678", 60, "0x8123456781234567");
testBinary64('rotr', "0x1234567812345678", 60, "0x2345678123456781");
testBinary64('rotl', "0x0000000000001000", 127, "0x0000000000000800");
testBinary64('rotr', "0x0000000000001000", 127, "0x0000000000002000");
testBinary64('rotr', 40, 0, 40);
testBinary64('rotl', 40, 0, 40);
testBinary64('and', 42, 0, 0);

Просмотреть файл

@ -1692,15 +1692,6 @@ class BaseCompiler
return true;
}
MOZ_MUST_USE bool popConstI64(int64_t& c) {
Stk& v = stk_.back();
if (v.kind() != Stk::ConstI64)
return false;
c = v.i64val();
stk_.popBack();
return true;
}
// TODO / OPTIMIZE (Bug 1316818): At the moment we use ReturnReg
// for JoinReg. It is possible other choices would lead to better
// register allocation, as ReturnReg is often first in the
@ -3984,23 +3975,18 @@ BaseCompiler::emitAddI32()
void
BaseCompiler::emitAddI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.add64(Imm64(c), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.add64(r1, r0);
freeI64(r1);
pushI64(r0);
}
// TODO / OPTIMIZE: Ditto check for constant here (Bug 1316803)
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.add64(r1, r0);
freeI64(r1);
pushI64(r0);
}
void
BaseCompiler::emitAddF64()
{
// TODO / OPTIMIZE: Ditto check for constant here (Bug 1316803)
RegF64 r0, r1;
pop2xF64(&r0, &r1);
masm.addDouble(r1, r0);
@ -4011,6 +3997,7 @@ BaseCompiler::emitAddF64()
void
BaseCompiler::emitAddF32()
{
// TODO / OPTIMIZE: Ditto check for constant here (Bug 1316803)
RegF32 r0, r1;
pop2xF32(&r0, &r1);
masm.addFloat32(r1, r0);
@ -4021,35 +4008,21 @@ BaseCompiler::emitAddF32()
void
BaseCompiler::emitSubtractI32()
{
int32_t c;
if (popConstI32(c)) {
RegI32 r = popI32();
masm.sub32(Imm32(c), r);
pushI32(r);
} else {
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.sub32(r1, r0);
freeI32(r1);
pushI32(r0);
}
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.sub32(r1, r0);
freeI32(r1);
pushI32(r0);
}
void
BaseCompiler::emitSubtractI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.sub64(Imm64(c), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.sub64(r1, r0);
freeI64(r1);
pushI64(r0);
}
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.sub64(r1, r0);
freeI64(r1);
pushI64(r0);
}
void
@ -4419,103 +4392,61 @@ BaseCompiler::emitCopysignF64()
void
BaseCompiler::emitOrI32()
{
int32_t c;
if (popConstI32(c)) {
RegI32 r = popI32();
masm.or32(Imm32(c), r);
pushI32(r);
} else {
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.or32(r1, r0);
freeI32(r1);
pushI32(r0);
}
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.or32(r1, r0);
freeI32(r1);
pushI32(r0);
}
void
BaseCompiler::emitOrI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.or64(Imm64(c), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.or64(r1, r0);
freeI64(r1);
pushI64(r0);
}
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.or64(r1, r0);
freeI64(r1);
pushI64(r0);
}
void
BaseCompiler::emitAndI32()
{
int32_t c;
if (popConstI32(c)) {
RegI32 r = popI32();
masm.and32(Imm32(c), r);
pushI32(r);
} else {
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.and32(r1, r0);
freeI32(r1);
pushI32(r0);
}
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.and32(r1, r0);
freeI32(r1);
pushI32(r0);
}
void
BaseCompiler::emitAndI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.and64(Imm64(c), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.and64(r1, r0);
freeI64(r1);
pushI64(r0);
}
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.and64(r1, r0);
freeI64(r1);
pushI64(r0);
}
void
BaseCompiler::emitXorI32()
{
int32_t c;
if (popConstI32(c)) {
RegI32 r = popI32();
masm.xor32(Imm32(c), r);
pushI32(r);
} else {
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.xor32(r1, r0);
freeI32(r1);
pushI32(r0);
}
RegI32 r0, r1;
pop2xI32(&r0, &r1);
masm.xor32(r1, r0);
freeI32(r1);
pushI32(r0);
}
void
BaseCompiler::emitXorI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.xor64(Imm64(c), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.xor64(r1, r0);
freeI64(r1);
pushI64(r0);
}
RegI64 r0, r1;
pop2xI64(&r0, &r1);
masm.xor64(r1, r0);
freeI64(r1);
pushI64(r0);
}
void
@ -4539,18 +4470,12 @@ BaseCompiler::emitShlI32()
void
BaseCompiler::emitShlI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.lshift64(Imm32(c & 63), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.lshift64(lowPart(r1), r0);
freeI64(r1);
pushI64(r0);
}
// TODO / OPTIMIZE: Constant rhs (Bug 1316803)
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.lshift64(lowPart(r1), r0);
freeI64(r1);
pushI64(r0);
}
void
@ -4574,18 +4499,12 @@ BaseCompiler::emitShrI32()
void
BaseCompiler::emitShrI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.rshift64Arithmetic(Imm32(c & 63), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rshift64Arithmetic(lowPart(r1), r0);
freeI64(r1);
pushI64(r0);
}
// TODO / OPTIMIZE: Constant rhs (Bug 1316803)
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rshift64Arithmetic(lowPart(r1), r0);
freeI64(r1);
pushI64(r0);
}
void
@ -4609,86 +4528,56 @@ BaseCompiler::emitShrU32()
void
BaseCompiler::emitShrU64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.rshift64(Imm32(c & 63), r);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rshift64(lowPart(r1), r0);
freeI64(r1);
pushI64(r0);
}
// TODO / OPTIMIZE: Constant rhs (Bug 1316803)
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rshift64(lowPart(r1), r0);
freeI64(r1);
pushI64(r0);
}
void
BaseCompiler::emitRotrI32()
{
int32_t c;
if (popConstI32(c)) {
RegI32 r = popI32();
masm.rotateRight(Imm32(c & 31), r, r);
pushI32(r);
} else {
RegI32 r0, r1;
pop2xI32ForShiftOrRotate(&r0, &r1);
masm.rotateRight(r1, r0, r0);
freeI32(r1);
pushI32(r0);
}
// TODO / OPTIMIZE: Constant rhs (Bug 1316803)
RegI32 r0, r1;
pop2xI32ForShiftOrRotate(&r0, &r1);
masm.rotateRight(r1, r0, r0);
freeI32(r1);
pushI32(r0);
}
void
BaseCompiler::emitRotrI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.rotateRight64(Imm32(c & 63), r, r, InvalidReg);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rotateRight64(lowPart(r1), r0, r0, maybeHighPart(r1));
freeI64(r1);
pushI64(r0);
}
// TODO / OPTIMIZE: Constant rhs (Bug 1316803)
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rotateRight64(lowPart(r1), r0, r0, maybeHighPart(r1));
freeI64(r1);
pushI64(r0);
}
void
BaseCompiler::emitRotlI32()
{
int32_t c;
if (popConstI32(c)) {
RegI32 r = popI32();
masm.rotateLeft(Imm32(c & 31), r, r);
pushI32(r);
} else {
RegI32 r0, r1;
pop2xI32ForShiftOrRotate(&r0, &r1);
masm.rotateLeft(r1, r0, r0);
freeI32(r1);
pushI32(r0);
}
// TODO / OPTIMIZE: Constant rhs (Bug 1316803)
RegI32 r0, r1;
pop2xI32ForShiftOrRotate(&r0, &r1);
masm.rotateLeft(r1, r0, r0);
freeI32(r1);
pushI32(r0);
}
void
BaseCompiler::emitRotlI64()
{
int64_t c;
if (popConstI64(c)) {
RegI64 r = popI64();
masm.rotateLeft64(Imm32(c & 63), r, r, InvalidReg);
pushI64(r);
} else {
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rotateLeft64(lowPart(r1), r0, r0, maybeHighPart(r1));
freeI64(r1);
pushI64(r0);
}
// TODO / OPTIMIZE: Constant rhs (Bug 1316803)
RegI64 r0, r1;
pop2xI64ForShiftOrRotate(&r0, &r1);
masm.rotateLeft64(lowPart(r1), r0, r0, maybeHighPart(r1));
freeI64(r1);
pushI64(r0);
}
void