Bug 1301400: Baseline Wasm Compiler: Part 12: Implement RotateI64, r=lth

This commit is contained in:
Hannes Verschore 2016-09-29 22:33:23 +02:00
Родитель 4b03aabf74
Коммит d733c7fa0d
1 изменённых файлов: 16 добавлений и 18 удалений

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

@ -2525,21 +2525,19 @@ class BaseCompiler
#endif #endif
} }
void rotateRightI64(RegI64 rhs, RegI64 srcDest) { void rotateRightI64(RegI64 shift, RegI64 srcDest) {
#if defined(JS_CODEGEN_X64) #ifdef JS_PUNBOX64
MOZ_ASSERT(rhs.reg.reg == rcx); masm.rotateRight64(shift.reg.reg, srcDest.reg, srcDest.reg, Register::Invalid());
masm.rorq_cl(srcDest.reg.reg);
#else #else
MOZ_CRASH("BaseCompiler platform hook: rotateRightI64"); masm.rotateRight64(shift.reg.low, srcDest.reg, srcDest.reg, shift.reg.high);
#endif #endif
} }
void rotateLeftI64(RegI64 rhs, RegI64 srcDest) { void rotateLeftI64(RegI64 shift, RegI64 srcDest) {
#if defined(JS_CODEGEN_X64) #ifdef JS_PUNBOX64
MOZ_ASSERT(rhs.reg.reg == rcx); masm.rotateLeft64(shift.reg.reg, srcDest.reg, srcDest.reg, Register::Invalid());
masm.rolq_cl(srcDest.reg.reg);
#else #else
MOZ_CRASH("BaseCompiler platform hook: rotateLeftI64"); masm.rotateLeft64(shift.reg.low, srcDest.reg, srcDest.reg, shift.reg.high);
#endif #endif
} }
@ -4088,11 +4086,11 @@ BaseCompiler::emitRotrI64()
{ {
// TODO / OPTIMIZE: Constant rhs // TODO / OPTIMIZE: Constant rhs
RegI64 r0, r1; RegI64 r0, r1;
#if defined(JS_CODEGEN_X64) #if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
r1 = popI64(specific_rcx); needI32(specific_ecx);
r1 = fromI32(specific_ecx);
r1 = popI64ToSpecific(r1);
r0 = popI64(); r0 = popI64();
#elif defined(JS_CODEGEN_X86)
MOZ_CRASH("BaseCompiler platform hook: emitRotrI64");
#else #else
pop2xI64(&r0, &r1); pop2xI64(&r0, &r1);
#endif #endif
@ -4122,11 +4120,11 @@ BaseCompiler::emitRotlI64()
{ {
// TODO / OPTIMIZE: Constant rhs // TODO / OPTIMIZE: Constant rhs
RegI64 r0, r1; RegI64 r0, r1;
#if defined(JS_CODEGEN_X64) #if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
r1 = popI64(specific_rcx); needI32(specific_ecx);
r1 = fromI32(specific_ecx);
r1 = popI64ToSpecific(r1);
r0 = popI64(); r0 = popI64();
#elif defined(JS_CODEGEN_X86)
MOZ_CRASH("BaseCompiler platform hook: emitRotlI64");
#else #else
pop2xI64(&r0, &r1); pop2xI64(&r0, &r1);
#endif #endif