void SourceAssembler::b(const Label& L, Condition cond) { if (_in_glue_code && !L.is_anonymous()) { stream()->print("\tldr%s\tpc, =", cond_name(cond)); } else { stream()->print("\tb%s\t", cond_name(cond)); } L.print_on(stream()); emit_comment_and_cr(); }
void SourceAssembler::ldr_nearby_label(Register r, Label& L, Condition cond) { // Loads the address of the label. // Label must be within approximately 256 instructions GUARANTEE(r != pc, "probably incorrect code"); // EVC ASM doesn't understand adrls #if EVC_ASM_QUIRK stream()->print("\tadrl%s\t%s, ", cond_name(cond), reg_name(r)); // stream()->print("\tldr%s\t%s, ", cond_name(cond), reg_name(r)); #else stream()->print("\tadr%s\t%s, ", cond_name(cond), reg_name(r)); #endif L.print_on(stream()); emit_comment_and_cr(); }
void InstructionPrinter::do_If(If* x) { tty->print("if "); print_value(x->x()); tty->print(" %s ", cond_name(x->cond())); print_value(x->y()); tty->print(" then B%d else B%d", x->sux_at(0)->block_id(), x->sux_at(1)->block_id()); }
void SourceAssembler::ldr_string(Register r, const char* string, Condition cond) { GUARANTEE(r != pc, "probably incorrect code"); GUARANTEE(string != NULL, "Sanity check"); Literal lit(string); // EVC ASM doesn't understand adrls #if EVC_ASM_QUIRK // stream()->print("\tldr%s\t%s, _D%d", stream()->print("\tadrl%s\t%s, _D%d", cond_name(cond), reg_name(r), lit.id()); #else stream()->print("\tadr%s\t%s, _D%d", cond_name(cond), reg_name(r), lit.id()); #endif emit_comment_and_cr(); _literals.add(lit); }
void SourceAssembler::ldr_label(Register r, Label& L, Condition cond) { // Loads the address of the label. GUARANTEE(r != pc, "probably incorrect code"); stream()->print("\tldr%s\t%s, =", cond_name(cond), reg_name(r)); L.print_on(stream()); emit_comment_and_cr(); }
void InstructionPrinter::do_If(If* x) { output()->print("if "); print_value(x->x()); output()->print(" %s ", cond_name(x->cond())); print_value(x->y()); output()->print(" then B%d else B%d", x->sux_at(0)->block_id(), x->sux_at(1)->block_id()); if (x->is_safepoint()) output()->print(" (safepoint)"); }
void InstructionPrinter::do_IfOp(IfOp* x) { print_value(x->x()); tty->print(" %s ", cond_name(x->cond())); print_value(x->y()); tty->print(" ? "); print_value(x->tval()); tty->print(" : "); print_value(x->fval()); }
void SourceAssembler::ldr_from(Register r, Label& L, int offset, Condition cond) { // Loads the contents of the label. Must be within ~1024 instructions stream()->print("\tldr%s\t%s, ", cond_name(cond), reg_name(r)); L.print_on(stream()); if (offset != 0) { stream()->print(" + %d", offset); } emit_comment_and_cr(); }
void InstructionPrinter::do_RangeCheckPredicate(RangeCheckPredicate* x) { if (x->x() != NULL && x->y() != NULL) { output()->print("if "); print_value(x->x()); output()->print(" %s ", cond_name(x->cond())); print_value(x->y()); output()->print(" then deoptimize!"); } else { output()->print("always deoptimize!"); } }
void SourceAssembler::bl(const Label& L, Condition cond) { stream()->print("\tbl%s\t", cond_name(cond)); L.print_on(stream()); emit_comment_and_cr(); }
void SourceAssembler::ldr_big_integer(Register r, int x, Condition cond) { stream()->print("\tldr%s\t%s, =0x%x", cond_name(cond), reg_name(r), x); emit_comment_and_cr(); }
void InstructionPrinter::do_Assert(Assert* x) { output()->print("assert "); print_value(x->x()); output()->print(" %s ", cond_name(x->cond())); print_value(x->y()); }