示例#1
0
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();
}
示例#2
0
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());
}
示例#4
0
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);
}
示例#5
0
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());
}
示例#8
0
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();
}
示例#9
0
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!");
  }
}
示例#10
0
void SourceAssembler::bl(const Label& L, Condition cond) {
  stream()->print("\tbl%s\t", cond_name(cond)); 
  L.print_on(stream());
  emit_comment_and_cr();
}
示例#11
0
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();
}
示例#12
0
void InstructionPrinter::do_Assert(Assert* x) {
  output()->print("assert ");
  print_value(x->x());
  output()->print(" %s ", cond_name(x->cond()));
  print_value(x->y());
}