Example #1
0
// get first element matching comp_op
void *getMatch(List *list, compare comp_op, void *data) {
	int i = 0;
	ListNode *n = list->head;
	while ((n != NULL) && !comp_op(n->data, data) ) {
		n = n->next;
	}
	return (n != NULL? n->data : NULL);
}
void LIR_Assembler::emit_op2(LIR_Op2* op) {
    switch (op->code()) {
    case lir_cmp:
        if (op->info() != NULL) {
            assert(op->in_opr1()->is_address() || op->in_opr2()->is_address(),
                   "shouldn't be codeemitinfo for non-address operands");
            add_debug_info_for_null_check_here(op->info()); // exception possible
        }
        comp_op(op->condition(), op->in_opr1(), op->in_opr2(), op);
        break;

    case lir_cmp_l2i:
    case lir_cmp_fd2i:
    case lir_ucmp_fd2i:
        comp_fl2i(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
        break;

    case lir_cmove:
        cmove(op->condition(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->type());
        break;

    case lir_shl:
    case lir_shr:
    case lir_ushr:
        if (op->in_opr2()->is_constant()) {
            shift_op(op->code(), op->in_opr1(), op->in_opr2()->as_constant_ptr()->as_jint(), op->result_opr());
        } else {
            shift_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp1_opr());
        }
        break;

    case lir_add:
    case lir_sub:
    case lir_mul:
    case lir_mul_strictfp:
    case lir_div:
    case lir_div_strictfp:
    case lir_rem:
        assert(op->fpu_pop_count() < 2, "");
        arith_op(
            op->code(),
            op->in_opr1(),
            op->in_opr2(),
            op->result_opr(),
            op->info(),
            op->fpu_pop_count() == 1);
        break;

    case lir_abs:
    case lir_sqrt:
    case lir_sin:
    case lir_tan:
    case lir_cos:
    case lir_log10:
        intrinsic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
        break;

    case lir_logic_and:
    case lir_logic_or:
    case lir_logic_xor:
        logic_op(
            op->code(),
            op->in_opr1(),
            op->in_opr2(),
            op->result_opr());
        break;

    case lir_throw:
        throw_op(op->in_opr1(), op->in_opr2(), op->info());
        break;

    case lir_xadd:
    case lir_xchg:
        atomic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp1_opr());
        break;

    default:
        Unimplemented();
        break;
    }
}
void LIR_Assembler::emit_op2(LIR_Op2* op) {
  switch (op->code()) {
    case lir_cmp:
      comp_op(op->condition(), op->in_opr1(), op->in_opr2(), op);
      break;
    
    case lir_cmp_l2i:
    case lir_cmp_fd2i:
    case lir_ucmp_fd2i:
      comp_fl2i(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
      break;

    case lir_cmove:
cmove(op->condition(),op->in_opr1(),op->in_opr2(),op->tmp_opr(),op->result_opr());
      break;

    case lir_shl:
    case lir_shr:
    case lir_ushr:
      if (op->in_opr2()->is_constant()) {
        shift_op(op->code(), op->in_opr1(), op->in_opr2()->as_constant_ptr()->as_jint(), op->result_opr());
      } else {
        shift_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp_opr());
      }
      break;

    case lir_add:
    case lir_sub:
    case lir_mul:
    case lir_mul_strictfp:
    case lir_div:
    case lir_div_strictfp:
    case lir_rem:
      arith_op(
        op->code(),
        op->in_opr1(),
        op->in_opr2(),
        op->result_opr(),
op->info());
      break;
    
    case lir_abs:
    case lir_sqrt:
    case lir_sin:
    case lir_tan:
    case lir_cos:
    case lir_log:
    case lir_log10:
      intrinsic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
      break;

    case lir_logic_and:
    case lir_logic_or:
    case lir_logic_xor:
      logic_op(
        op->code(),
        op->in_opr1(),
        op->in_opr2(),
        op->result_opr());
      break;

    case lir_throw:
    case lir_unwind:
throw_op(op->in_opr2(),op->in_opr1(),op->info(),op->code()==lir_unwind);
      break;

    default:
      Unimplemented();
      break;
  }
}
Example #4
0
void PPLMGeneralComparison::do_next (xqp_tuple &t)
{
 	if (first_time)
    {
		first_time = false;
		tuple_cell (*comp_op) (const tuple_cell&,const tuple_cell&,CollationHandler*);
		if (strict)
		{
			if (more)
				comp_op=op_gt;
			else
				comp_op=op_lt;
		}
		else
		{
			if (more)
				comp_op=op_ge;
			else
				comp_op=op_le;
		}
		//INSERT CODE HERE
		if (!eos_reached1) seq1.op->reopen();
		if (!eos_reached2) seq2.op->reopen();
		eos_reached2 = false;
		eos_reached1 = false;
		xqp_tuple cont1(seq1.ts);
		xqp_tuple cont2(seq2.ts);
		seq1.op->next(cont1);
		sequence seq(1);
		xqp_tuple at_tup(1);
		seq2.op->next(cont2);
		if (cont2.is_eos())
		{
			eos_reached2 = true;
			t.copy(tuple_cell::atomic(false));
			return;
		}
		tuple_cell res1=getAtomizedCell(cont2);
		while (!cont1.is_eos())
		{
			tuple_cell res=getAtomizedCell(cont1);
			at_tup.cells[0]=res;
			generalNodePrepare(res,res1);
			if (comp_op(res,res1,handler).get_xs_boolean())
			{
				t.copy(tuple_cell::atomic(true));
				return;
			}
			seq.add(at_tup);
			seq1.op->next(cont1);
		}
		eos_reached1 = true;
		if (seq.size()<1)
		{
			t.copy(tuple_cell::atomic(false));
			return;
		}
		seq2.op->next(cont2);
		while (!cont2.is_eos())
		{
			tuple_cell res1=getAtomizedCell(cont2);
			sequence::iterator it=seq.begin();
			do
			{
				tuple_cell res2=(*it).cells[0];
				generalNodePrepare(res1,res2);
				if (comp_op(res2,res1,handler).get_xs_boolean())
				{
					t.copy(tuple_cell::atomic(true));
					return;
				}
				it++;
			}
			while (it!=seq.end());
			seq2.op->next(cont2);
		}
		eos_reached2 = true;
		t.copy(tuple_cell::atomic(false));
		return;

	}
	else 
    {
        first_time = true;
        t.set_eos();
    }
}