int n_calls = 0;
bb_cur = bb;
+ bb_cur->call_flag = 0;
for (l2 = scf_list_head(&bb->code_list_head); l2 != scf_list_sentinel(&bb->code_list_head); ) {
c = scf_list_data(l2, scf_3ac_code_t, list);
src = c->srcs->data[0];
v = _scf_operand_get(src->node);
- if (!v->const_literal_flag)
+ if (!v->const_literal_flag) {
+ bb_cur->call_flag |= n_calls > 0;
continue;
+ }
f2 = v->func_ptr;
- if (!f2->node.define_flag)
- continue;
-
- if (!f2->inline_flag)
- continue;
-
- if (f2->vargs_flag)
+ if (!f2->node.define_flag || !f2->inline_flag || f2->vargs_flag) {
+ bb_cur->call_flag |= n_calls > 0;
continue;
+ }
- if (f2->nb_basic_blocks > 10)
+ if (f2->nb_basic_blocks > 10) {
+ bb_cur->call_flag |= n_calls > 0;
continue;
+ }
#if 1
bb2 = bb_cur;
bb_cur->call_flag = 0;
}
#endif
}
-
- bb_cur->call_flag |= n_calls > 0;
}
#if 0
scf_variable_t* v = dn->var;
if (v && v->w)
- scf_logw("dn: %#lx, v_%d/%s/%#lx\n", 0xffff & (uintptr_t)dn, v->w->line, v->w->text->data, 0xffff & (uintptr_t)v);
+ scf_logd("dn: %#lx, v_%d/%s/%#lx\n", 0xffff & (uintptr_t)dn, v->w->line, v->w->text->data, 0xffff & (uintptr_t)v);
else
- scf_logw("dn: %#lx, v_%#lx\n", 0xffff & (uintptr_t)dn, 0xffff & (uintptr_t)v);
+ scf_logd("dn: %#lx, v_%#lx\n", 0xffff & (uintptr_t)dn, 0xffff & (uintptr_t)v);
break;
}
}
if (ri->bytes < ri2->bytes) {
if (scf_variable_signed(index->var)) {
- mov = x64_find_OpCode(SCF_X64_MOVSX, ri->bytes, ri2->bytes, SCF_X64_E2G);
+ mov = x64_find_OpCode(SCF_X64_MOVSX, ri->bytes, ri2->bytes, SCF_X64_E2G);
+ inst = x64_make_inst_E2G(mov, ri2, ri);
+ X64_INST_ADD_CHECK(c->instructions, inst);
} else if (ri->bytes <= 2) {
- mov = x64_find_OpCode(SCF_X64_MOVZX, ri->bytes, ri2->bytes, SCF_X64_E2G);
+ mov = x64_find_OpCode(SCF_X64_MOVZX, ri->bytes, ri2->bytes, SCF_X64_E2G);
+ inst = x64_make_inst_E2G(mov, ri2, ri);
+ X64_INST_ADD_CHECK(c->instructions, inst);
} else {
assert(4 == ri->bytes);
-
+/*
xor = x64_find_OpCode(SCF_X64_XOR, 8, 8, SCF_X64_G2E);
inst = x64_make_inst_G2E(xor, ri2, ri2);
X64_INST_ADD_CHECK(c->instructions, inst);
-
- mov = x64_find_OpCode(SCF_X64_MOV, 4, 4, SCF_X64_E2G);
+ mov = x64_find_OpCode(SCF_X64_MOV, 4, 4, SCF_X64_E2G);
+*/
}
- inst = x64_make_inst_E2G(mov, ri2, ri);
- X64_INST_ADD_CHECK(c->instructions, inst);
-
ri = ri2;
}