Index: src/sh4/code-stubs-sh4.h |
diff --git a/src/arm/code-stubs-arm.h b/src/sh4/code-stubs-sh4.h |
similarity index 90% |
copy from src/arm/code-stubs-arm.h |
copy to src/sh4/code-stubs-sh4.h |
index 3e796249c8435f97f7a14f0454f5c2e8835446ed..374a2e8dd1a8ea239194c003dcb2596fdeb3f8be 100644 |
--- a/src/arm/code-stubs-arm.h |
+++ b/src/sh4/code-stubs-sh4.h |
@@ -1,4 +1,4 @@ |
-// Copyright 2012 the V8 project authors. All rights reserved. |
+// Copyright 2011-2012 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -25,8 +25,8 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-#ifndef V8_ARM_CODE_STUBS_ARM_H_ |
-#define V8_ARM_CODE_STUBS_ARM_H_ |
+#ifndef V8_SH4_CODE_STUBS_SH4_H_ |
+#define V8_SH4_CODE_STUBS_SH4_H_ |
#include "ic-inl.h" |
@@ -149,7 +149,7 @@ class BinaryOpStub: public CodeStub { |
mode_(mode), |
operands_type_(BinaryOpIC::UNINITIALIZED), |
result_type_(BinaryOpIC::UNINITIALIZED) { |
- use_vfp2_ = CpuFeatures::IsSupported(VFP2); |
+ use_fpu_ = CpuFeatures::IsSupported(FPU); |
ASSERT(OpBits::is_valid(Token::NUM_TOKENS)); |
} |
@@ -159,7 +159,7 @@ class BinaryOpStub: public CodeStub { |
BinaryOpIC::TypeInfo result_type = BinaryOpIC::UNINITIALIZED) |
: op_(OpBits::decode(key)), |
mode_(ModeBits::decode(key)), |
- use_vfp2_(VFP2Bits::decode(key)), |
+ use_fpu_(FPUBits::decode(key)), |
operands_type_(operands_type), |
result_type_(result_type) { } |
@@ -171,7 +171,7 @@ class BinaryOpStub: public CodeStub { |
Token::Value op_; |
OverwriteMode mode_; |
- bool use_vfp2_; |
+ bool use_fpu_; |
// Operand type information determined at runtime. |
BinaryOpIC::TypeInfo operands_type_; |
@@ -182,7 +182,7 @@ class BinaryOpStub: public CodeStub { |
// Minor key encoding in 16 bits RRRTTTVOOOOOOOMM. |
class ModeBits: public BitField<OverwriteMode, 0, 2> {}; |
class OpBits: public BitField<Token::Value, 2, 7> {}; |
- class VFP2Bits: public BitField<bool, 9, 1> {}; |
+ class FPUBits: public BitField<bool, 9, 1> {}; |
class OperandTypeInfoBits: public BitField<BinaryOpIC::TypeInfo, 10, 3> {}; |
class ResultTypeInfoBits: public BitField<BinaryOpIC::TypeInfo, 13, 3> {}; |
@@ -190,7 +190,7 @@ class BinaryOpStub: public CodeStub { |
int MinorKey() { |
return OpBits::encode(op_) |
| ModeBits::encode(mode_) |
- | VFP2Bits::encode(use_vfp2_) |
+ | FPUBits::encode(use_fpu_) |
| OperandTypeInfoBits::encode(operands_type_) |
| ResultTypeInfoBits::encode(result_type_); |
} |
@@ -294,14 +294,17 @@ class StringHelper : public AllStatic { |
// Generate string hash. |
static void GenerateHashInit(MacroAssembler* masm, |
Register hash, |
- Register character); |
+ Register character, |
+ Register scratch); |
static void GenerateHashAddCharacter(MacroAssembler* masm, |
Register hash, |
- Register character); |
+ Register character, |
+ Register scratch); |
static void GenerateHashGetHash(MacroAssembler* masm, |
- Register hash); |
+ Register hash, |
+ Register scratch); |
private: |
DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); |
@@ -485,57 +488,20 @@ class RecordWriteStub: public CodeStub { |
virtual bool SometimesSetsUpAFrame() { return false; } |
static void PatchBranchIntoNop(MacroAssembler* masm, int pos) { |
- masm->instr_at_put(pos, (masm->instr_at(pos) & ~B27) | (B24 | B20)); |
- ASSERT(Assembler::IsTstImmediate(masm->instr_at(pos))); |
+ UNIMPLEMENTED(); |
} |
static void PatchNopIntoBranch(MacroAssembler* masm, int pos) { |
- masm->instr_at_put(pos, (masm->instr_at(pos) & ~(B24 | B20)) | B27); |
- ASSERT(Assembler::IsBranch(masm->instr_at(pos))); |
+ UNIMPLEMENTED(); |
} |
static Mode GetMode(Code* stub) { |
- Instr first_instruction = Assembler::instr_at(stub->instruction_start()); |
- Instr second_instruction = Assembler::instr_at(stub->instruction_start() + |
- Assembler::kInstrSize); |
- |
- if (Assembler::IsBranch(first_instruction)) { |
- return INCREMENTAL; |
- } |
- |
- ASSERT(Assembler::IsTstImmediate(first_instruction)); |
- |
- if (Assembler::IsBranch(second_instruction)) { |
- return INCREMENTAL_COMPACTION; |
- } |
- |
- ASSERT(Assembler::IsTstImmediate(second_instruction)); |
- |
+ // TODO(STM): UNIMPLEMENTED |
return STORE_BUFFER_ONLY; |
} |
static void Patch(Code* stub, Mode mode) { |
- MacroAssembler masm(NULL, |
- stub->instruction_start(), |
- stub->instruction_size()); |
- switch (mode) { |
- case STORE_BUFFER_ONLY: |
- ASSERT(GetMode(stub) == INCREMENTAL || |
- GetMode(stub) == INCREMENTAL_COMPACTION); |
- PatchBranchIntoNop(&masm, 0); |
- PatchBranchIntoNop(&masm, Assembler::kInstrSize); |
- break; |
- case INCREMENTAL: |
- ASSERT(GetMode(stub) == STORE_BUFFER_ONLY); |
- PatchNopIntoBranch(&masm, 0); |
- break; |
- case INCREMENTAL_COMPACTION: |
- ASSERT(GetMode(stub) == STORE_BUFFER_ONLY); |
- PatchNopIntoBranch(&masm, Assembler::kInstrSize); |
- break; |
- } |
- ASSERT(GetMode(stub) == mode); |
- CPU::FlushICache(stub->instruction_start(), 2 * Assembler::kInstrSize); |
+ UNIMPLEMENTED(); |
} |
private: |
@@ -569,34 +535,18 @@ class RecordWriteStub: public CodeStub { |
// saved registers that were not already preserved. The scratch registers |
// will be restored by other means so we don't bother pushing them here. |
void SaveCallerSaveRegisters(MacroAssembler* masm, SaveFPRegsMode mode) { |
- masm->stm(db_w, sp, (kCallerSaved | lr.bit()) & ~scratch1_.bit()); |
+ masm->pushm((kJSCallerSaved | pr.bit()) & ~scratch1_.bit()); |
if (mode == kSaveFPRegs) { |
- CpuFeatures::Scope scope(VFP2); |
- masm->sub(sp, |
- sp, |
- Operand(kDoubleSize * (DwVfpRegister::kNumRegisters - 1))); |
- // Save all VFP registers except d0. |
- for (int i = DwVfpRegister::kNumRegisters - 1; i > 0; i--) { |
- DwVfpRegister reg = DwVfpRegister::from_code(i); |
- masm->vstr(reg, MemOperand(sp, (i - 1) * kDoubleSize)); |
- } |
+ UNIMPLEMENTED(); |
} |
} |
inline void RestoreCallerSaveRegisters(MacroAssembler*masm, |
SaveFPRegsMode mode) { |
if (mode == kSaveFPRegs) { |
- CpuFeatures::Scope scope(VFP2); |
- // Restore all VFP registers except d0. |
- for (int i = DwVfpRegister::kNumRegisters - 1; i > 0; i--) { |
- DwVfpRegister reg = DwVfpRegister::from_code(i); |
- masm->vldr(reg, MemOperand(sp, (i - 1) * kDoubleSize)); |
- } |
- masm->add(sp, |
- sp, |
- Operand(kDoubleSize * (DwVfpRegister::kNumRegisters - 1))); |
+ UNIMPLEMENTED(); |
} |
- masm->ldm(ia_w, sp, (kCallerSaved | lr.bit()) & ~scratch1_.bit()); |
+ masm->popm((kJSCallerSaved | pr.bit()) & ~scratch1_.bit()); |
} |
inline Register object() { return object_; } |
@@ -693,14 +643,16 @@ class RegExpCEntryStub: public CodeStub { |
// moved by GC |
class DirectCEntryStub: public CodeStub { |
public: |
- DirectCEntryStub() {} |
+ explicit DirectCEntryStub(Register scratch) : scratch_(scratch) {} |
void Generate(MacroAssembler* masm); |
- void GenerateCall(MacroAssembler* masm, ExternalReference function); |
- void GenerateCall(MacroAssembler* masm, Register target); |
+ void GenerateCall(MacroAssembler* masm, ExternalReference function, |
+ Register scratch1, Register scratch2); |
+ void GenerateCall(MacroAssembler* masm, Register target, Register scratch1); |
private: |
Major MajorKey() { return DirectCEntry; } |
int MinorKey() { return 0; } |
+ Register scratch_; |
bool NeedsImmovableCode() { return true; } |
}; |
@@ -773,7 +725,6 @@ class FloatingPointHelper : public AllStatic { |
Register object, |
Destination destination, |
DwVfpRegister double_dst, |
- DwVfpRegister double_scratch, |
Register dst1, |
Register dst2, |
Register heap_number_map, |
@@ -795,8 +746,7 @@ class FloatingPointHelper : public AllStatic { |
Register scratch1, |
Register scratch2, |
Register scratch3, |
- DwVfpRegister double_scratch0, |
- DwVfpRegister double_scratch1, |
+ DwVfpRegister double_scratch, |
Label* not_int32); |
// Generate non VFP3 code to check if a double can be exactly represented by a |
@@ -902,4 +852,4 @@ class StringDictionaryLookupStub: public CodeStub { |
} } // namespace v8::internal |
-#endif // V8_ARM_CODE_STUBS_ARM_H_ |
+#endif // V8_SH4_CODE_STUBS_SH4_H_ |