Exemple #1
0
/* Store in R0 the result of evaluating the operator TOK with
   a register operand SRC and an immediate operand IMM.  */
void
gen_reg_imm (int src, int imm, int tok)
{
  switch (tok)
    {
    case '+': jit_addi_i (JIT_R0, src, imm); break;
    case '-': jit_subi_i (JIT_R0, src, imm); break;
    case '*': jit_muli_i (JIT_R0, src, imm); break;
    case '/': jit_divi_i (JIT_R0, src, imm); break;
    case '%': jit_modi_i (JIT_R0, src, imm); break;
    case '&': jit_andi_i (JIT_R0, src, imm); break;
    case '|': jit_ori_i (JIT_R0, src, imm); break;
    case '^': jit_xori_i (JIT_R0, src, imm); break;
    case '=': jit_eqi_i (JIT_R0, src, imm); break;
    case '<': jit_lti_i (JIT_R0, src, imm); break;
    case '>': jit_gti_i (JIT_R0, src, imm); break;
    case LE: jit_lei_i (JIT_R0, src, imm); break;
    case GE: jit_gei_i (JIT_R0, src, imm); break;
    case NE: jit_nei_i (JIT_R0, src, imm); break;
    case LSH: jit_lshi_i (JIT_R0, src, imm); break;
    case RSH: jit_rshi_i (JIT_R0, src, imm); break;
    case RSHU: jit_rshi_ui (JIT_R0, src, imm); break;
    default: abort ();
    }
}
Exemple #2
0
mod_t
generate_modi (int operand)
{
  mod_t result;
  int arg;

  buffer = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC,
		MAP_PRIVATE | MAP_ANON, -1, 0);
  if (buffer == MAP_FAILED) {
    perror("mmap");
    exit(0);
  }

  result = (mod_t)(jit_set_ip (buffer).iptr);
  jit_leaf (1);
  arg = jit_arg_i ();
  jit_getarg_i (JIT_R1, arg);

  jit_modi_i (JIT_R2, JIT_R1, operand);
  jit_movr_i (JIT_RET, JIT_R2);

  jit_ret ();
  jit_flush_code (buffer, jit_get_ip ().ptr);

  return result;
}
Exemple #3
0
mod_t
generate_modi (int operand)
{
  static char buffer[1024];
  mod_t result;
  int arg;

  result = (mod_t)(jit_set_ip (buffer).iptr);
  jit_leaf (1);
  arg = jit_arg_i ();
  jit_getarg_i (JIT_R1, arg);

  jit_modi_i (JIT_R2, JIT_R1, operand);
  jit_movr_i (JIT_RET, JIT_R2);

  jit_ret ();
  jit_flush_code (buffer, jit_get_ip ().ptr);

  return result;
}