void SnapshotWriter::addSlot(const Register &type, const Register &payload) { IonSpew(IonSpew_Snapshots, " slot %u: value (t=%s, d=%s)", slotsWritten_, type.name(), payload.name()); writeSlotHeader(JSVAL_TYPE_MAGIC, NUNBOX32_REG_REG); writer_.writeByte(type.code()); writer_.writeByte(payload.code()); }
void SnapshotWriter::addSlot(const Register &value) { IonSpew(IonSpew_Snapshots, " slot %u: value (reg %s)", slotsWritten_, value.name()); writeSlotHeader(JSVAL_TYPE_MAGIC, value.code()); }
void SnapshotWriter::addSlot(JSValueType type, const Register ®) { IonSpew(IonSpew_Snapshots, " slot %u: %s (%s)", slotsWritten_, ValTypeToString(type), reg.name()); JS_ASSERT(type != JSVAL_TYPE_DOUBLE); writeSlotHeader(type, reg.code()); }
void SnapshotWriter::addSlot(int32_t typeStackIndex, const Register &payload) { IonSpew(IonSpew_Snapshots, " slot %u: value (t=%d, d=%s)", slotsWritten_, typeStackIndex, payload.name()); writeSlotHeader(JSVAL_TYPE_MAGIC, NUNBOX32_STACK_REG); writer_.writeSigned(typeStackIndex); writer_.writeByte(payload.code()); }
void SnapshotWriter::addSlot(const Register &type, int32_t payloadStackIndex) { IonSpew(IonSpew_Snapshots, " slot %u: value (t=%s, d=%d)", slotsWritten_, type.name(), payloadStackIndex); writeSlotHeader(JSVAL_TYPE_MAGIC, NUNBOX32_REG_STACK); writer_.writeByte(type.code()); writer_.writeSigned(payloadStackIndex); }
void MacroAssembler::lowLevelDebug(const char *s, Register ra, Register rb, Register rc) { Q_ASSERT(ra.code() < 13 && rb.code() < 13 && rc.code() < 13); int preserved = 0x1fff | lr.bit(); stm(db_w, sp, preserved); add(fp, sp, Operand(12*4)); mrs(r4, CPSR); Label omitString; b(&omitString); int sPtr = intptr_t(buffer_ + pcOffset()); do { db(*s); } while (*(s++)); while (pcOffset() & 3) db('\0'); bind(&omitString); ldr(r3, MemOperand(sp, rc.code()*4)); ldr(r2, MemOperand(sp, rb.code()*4)); ldr(r1, MemOperand(sp, ra.code()*4)); mov(r0, Operand(sPtr)); void (*qDebugPtr)(const char *,...) = &qDebug; mov(ip, Operand(intptr_t(qDebugPtr))); blx(ip); msr(CPSR_f, Operand(r4)); ldm(ia_w, sp, preserved); }
bool CodeGeneratorX86Shared::visitMulNegativeZeroCheck(MulNegativeZeroCheck *ool) { LMulI *ins = ool->ins(); Register result = ToRegister(ins->output()); Operand lhsCopy = ToOperand(ins->lhsCopy()); Operand rhs = ToOperand(ins->rhs()); JS_ASSERT_IF(lhsCopy.kind() == Operand::REG, lhsCopy.reg() != result.code()); // Result is -0 if lhs or rhs is negative. masm.movl(lhsCopy, result); masm.orl(rhs, result); if (!bailoutIf(Assembler::Signed, ins->snapshot())) return false; masm.mov(ImmWord(0), result); masm.jmp(ool->rejoin()); return true; }
void Debugger::PrintRegister(const Register& target_reg, const char* name, const FormatToken* format) { const uint64_t reg_size = target_reg.size(); const uint64_t format_size = format->SizeOf() * 8; const uint64_t count = reg_size / format_size; const uint64_t mask = 0xffffffffffffffff >> (64 - format_size); const uint64_t reg_value = reg<uint64_t>(target_reg.code(), Reg31IsStackPointer); VIXL_ASSERT(count > 0); printf("%s = ", name); for (uint64_t i = 1; i <= count; i++) { uint64_t data = reg_value >> (reg_size - (i * format_size)); data &= mask; format->PrintData(&data); printf(" "); } printf("\n"); }