Skip to content
This repository has been archived by the owner on Apr 3, 2020. It is now read-only.

Commit

Permalink
Merge pull request #3 from fenghaitao/master
Browse files Browse the repository at this point in the history
Optimize Float32x4Array and Int32x4Array element loading and storing
  • Loading branch information
fenghaitao committed Mar 7, 2014
2 parents 112f47f + 9ae2546 commit 217644d
Show file tree
Hide file tree
Showing 43 changed files with 1,561 additions and 476 deletions.
29 changes: 29 additions & 0 deletions src/arm/assembler-arm.h
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,34 @@ struct QwNeonRegister {
return r;
}

static int ToAllocationIndex(QwNeonRegister reg) {
ASSERT(reg.code() < kMaxNumRegisters);
return reg.code();
}

static const char* AllocationIndexToString(int index) {
ASSERT(index >= 0 && index < kMaxNumRegisters);
const char* const names[] = {
"q0",
"q1",
"q2",
"q3",
"q4",
"q5",
"q6",
"q7",
"q8",
"q9",
"q10",
"q11",
"q12",
"q13",
"q14",
"q15",
};
return names[index];
}

bool is_valid() const {
return (0 <= code_) && (code_ < kMaxNumRegisters);
}
Expand All @@ -385,6 +413,7 @@ struct QwNeonRegister {


typedef QwNeonRegister QuadRegister;
typedef QwNeonRegister SIMD128Register;


// Support for the VFP registers s0 to s31 (d0 to d15).
Expand Down
6 changes: 6 additions & 0 deletions src/arm/cpu-arm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ bool CPU::SupportsCrankshaft() {
}


bool CPU::SupportsSIMD128InCrankshaft() {
// Not Implemented.
return false;
}


void CPU::FlushICache(void* start, size_t size) {
// Nothing to do flushing no instructions.
if (size == 0) {
Expand Down
18 changes: 15 additions & 3 deletions src/arm/deoptimizer-arm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ void Deoptimizer::SetPlatformCompiledStubRegisters(
}


void Deoptimizer::CopyDoubleRegisters(FrameDescription* output_frame) {
void Deoptimizer::CopySIMD128Registers(FrameDescription* output_frame) {
for (int i = 0; i < DwVfpRegister::kMaxNumRegisters; ++i) {
double double_value = input_->GetDoubleRegister(i);
output_frame->SetDoubleRegister(i, double_value);
Expand Down Expand Up @@ -210,7 +210,7 @@ void Deoptimizer::EntryGenerator::Generate() {

// Copy VFP registers to
// double_registers_[DoubleRegister::kMaxNumAllocatableRegisters]
int double_regs_offset = FrameDescription::double_registers_offset();
int double_regs_offset = FrameDescription::simd128_registers_offset();
for (int i = 0; i < DwVfpRegister::kMaxNumAllocatableRegisters; ++i) {
int dst_offset = i * kDoubleSize + double_regs_offset;
int src_offset = i * kDoubleSize + kNumberOfRegisters * kPointerSize;
Expand Down Expand Up @@ -284,7 +284,7 @@ void Deoptimizer::EntryGenerator::Generate() {
__ CheckFor32DRegs(ip);

__ ldr(r1, MemOperand(r0, Deoptimizer::input_offset()));
int src_offset = FrameDescription::double_registers_offset();
int src_offset = FrameDescription::simd128_registers_offset();
for (int i = 0; i < DwVfpRegister::kMaxNumRegisters; ++i) {
if (i == kDoubleRegZero.code()) continue;
if (i == kScratchDoubleReg.code()) continue;
Expand Down Expand Up @@ -350,6 +350,18 @@ void FrameDescription::SetCallerFp(unsigned offset, intptr_t value) {
}


double FrameDescription::GetDoubleRegister(unsigned n) const {
ASSERT(n < 2 * ARRAY_SIZE(simd128_registers_));
return simd128_registers_[n / 2].d[n % 2];
}


void FrameDescription::SetDoubleRegister(unsigned n, double value) {
ASSERT(n < 2 * ARRAY_SIZE(simd128_registers_));
simd128_registers_[n / 2].d[n % 2] = value;
}


#undef __

} } // namespace v8::internal
2 changes: 2 additions & 0 deletions src/cpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ class CPU V8_FINAL BASE_EMBEDDED {

static bool SupportsCrankshaft();

static bool SupportsSIMD128InCrankshaft();

// Flush instruction cache.
static void FlushICache(void* start, size_t size);

Expand Down
Loading

0 comments on commit 217644d

Please sign in to comment.