Fix ARM build.

This commit is contained in:
David Anderson 2011-10-12 15:57:14 -07:00
parent 9cd9889bec
commit 1231359944
5 changed files with 55 additions and 9 deletions

View File

@ -167,7 +167,7 @@ MacroAssembler::guardTypeSet(const T &address, types::TypeSet *types,
if (JSObject *object = types->getSingleObject(i))
branchPtr(Equal, obj, ImmGCPtr(object), &matched);
}
jmp(mismatched);
jump(mismatched);
bind(&notSingleton);
loadPtr(Address(obj, JSObject::offsetOfType()), scratch);
@ -177,7 +177,7 @@ MacroAssembler::guardTypeSet(const T &address, types::TypeSet *types,
}
}
jmp(mismatched);
jump(mismatched);
bind(&matched);
}

View File

@ -116,6 +116,12 @@ Assembler::TraceJumpRelocations(JSTracer *trc, IonCode *code, CompactBufferReade
#endif
}
void
Assembler::TraceDataRelocations(JSTracer *trc, IonCode *code, CompactBufferReader &reader)
{
JS_NOT_REACHED("Feature NYI");
}
void
Assembler::copyJumpRelocationTable(uint8 *dest)
{
@ -123,10 +129,17 @@ Assembler::copyJumpRelocationTable(uint8 *dest)
memcpy(dest, jumpRelocations_.buffer(), jumpRelocations_.length());
}
void
Assembler::copyDataRelocationTable(uint8 *dest)
{
if (dataRelocations_.length())
memcpy(dest, dataRelocations_.buffer(), dataRelocations_.length());
}
void
Assembler::trace(JSTracer *trc)
{
JS_NOT_REACHED("Feature NYI");
JS_NOT_REACHED("Feature NYI - must trace jump and data");
#if 0
for (size_t i = 0; i < jumps_.length(); i++) {
RelativePatch &rp = jumps_[i];

View File

@ -785,6 +785,7 @@ class Assembler
js::Vector<CodeLabel *, 0, SystemAllocPolicy> codeLabels_;
js::Vector<RelativePatch, 8, SystemAllocPolicy> jumps_;
CompactBufferWriter jumpRelocations_;
CompactBufferWriter dataRelocations_;
size_t dataBytesNeeded_;
bool enoughMemory_;
@ -849,6 +850,7 @@ class Assembler
void processDeferredData(IonCode *code, uint8 *data);
void processCodeLabels(IonCode *code);
void copyJumpRelocationTable(uint8 *buffer);
void copyDataRelocationTable(uint8 *buffer);
bool addDeferredData(DeferredData *data, size_t bytes) {
data->setOffset(dataBytesNeeded_);
@ -867,15 +869,21 @@ class Assembler
return m_buffer.uncheckedSize();
}
// Size of the jump relocation table, in bytes.
size_t jumpRelocationTableSize() const {
return relocations_.length();
size_t jumpRelocationTableBytes() const {
return jumpRelocations_.length();
}
size_t dataRelocationTableBytes() const {
return dataRelocations_.length();
}
// Size of the data table, in bytes.
size_t dataSize() const {
return dataBytesNeeded_;
}
size_t bytesNeeded() const {
return size() + dataSize() + jumpRelocationTableSize();
return size() +
dataSize() +
jumpRelocationTableBytes() +
dataRelocationTableBytes();
}
// write a blob of binary into the instruction stream
void writeBlob(uint32 x)
@ -1395,6 +1403,7 @@ class Assembler
#endif
public:
static void TraceJumpRelocations(JSTracer *trc, IonCode *code, CompactBufferReader &reader);
static void TraceDataRelocations(JSTracer *trc, IonCode *code, CompactBufferReader &reader);
// The buffer is about to be linked, make sure any constant pools or excess
// bookkeeping has been flushed to the instruction stream.

View File

@ -636,7 +636,7 @@ CodeGeneratorARM::ToValue(LInstruction *ins, size_t pos)
}
bool
CodeGeneratorARM::visitValue(LValue *value)
CodeGeneratorARM::visitValue(LValue *value)
{
jsval_layout jv = JSVAL_TO_IMPL(value->value());
@ -645,7 +645,7 @@ bool
masm.ma_mov(Imm32(jv.s.tag), ToRegister(type));
if (value->value().isMarkable())
masm.ma_mov(ImmGCPtr(jv.s.payload.ptr), ToRegister(payload));
masm.ma_mov(ImmGCPtr((gc::Cell *)jv.s.payload.ptr), ToRegister(payload));
else
masm.ma_mov(Imm32(jv.s.payload.u32), ToRegister(payload));
return true;

View File

@ -614,6 +614,9 @@ public:
framePushed_ -= amount;
}
void branchTest32(Condition cond, const Address &address, Imm32 imm, Label *label) {
JS_NOT_REACHED("NYI");
}
void branchPtr(Condition cond, Register lhs, ImmGCPtr ptr, Label *label) {
JS_NOT_REACHED("NYI");
}
@ -729,6 +732,24 @@ public:
VFPRegister(dest), FloatToCore);
}
// Extended unboxing API. If the payload is already in a register, returns
// that register. Otherwise, provides a move to the given scratch register,
// and returns that.
Register extractObject(const Address &address, Register scratch) {
JS_NOT_REACHED("NYI");
return scratch;
}
Register extractObject(const ValueOperand &value, Register scratch) {
return value.payloadReg();
}
Register extractTag(const Address &address, Register scratch) {
JS_NOT_REACHED("NYI");
return scratch;
}
Register extractTag(const ValueOperand &value, Register scratch) {
return value.typeReg();
}
void boolValueToDouble(const ValueOperand &operand, const FloatRegister &dest) {
JS_NOT_REACHED("Codegen for boolValueToDouble NYI");
#if 0
@ -843,7 +864,10 @@ public:
void branchTestUndefined(Condition cond, const T & t, Label *label) {
JS_NOT_REACHED("feature NYI");
}
template <typename T>
void branchTestNumber(Condition cond, const T &t, Label *label) {
JS_NOT_REACHED("feature NYI");
}
template<typename T>
void branchTestBooleanTruthy(bool b, const T & t, Label *label) {