示例#1
0
文件: encode.c 项目: jvirtanen/jato
void insn_encode(struct insn *insn, struct buffer *buffer, struct basic_block *bb)
{
	uint32_t encoded_insn = arm_encode_table[insn->type];

	if (encoded_insn & LOAD_STORE) {
		if (encoded_insn & LOAD_INSN) {
			encoded_insn = encoded_insn | ((arm_encode_reg(mach_reg(&insn->dest.reg)) & 0xF) << 12);
			encoded_insn = encoded_insn | encode_base_reg_load(insn);
			if (!(encoded_insn & REG_OFFSET))
				encoded_insn = encoded_insn | encode_imm_offset_load(insn);
		} else {
			encoded_insn = encoded_insn | ((arm_encode_reg(mach_reg(&insn->src.reg)) & 0xF) << 12);
			encoded_insn = encoded_insn | encode_base_reg_store(insn);
			if (!(encoded_insn & REG_OFFSET))
				encoded_insn = encoded_insn | encode_imm_offset_store(insn);
		}
	} else if (encoded_insn & BRANCH) {
		encoded_insn = encoded_insn | ((emit_branch(insn, bb) >> 2) & 0xFFFFFF);
	} else {
示例#2
0
static unsigned char encode_reg(struct use_position *reg)
{
	return x86_encode_reg(mach_reg(reg));
}
示例#3
0
static void assert_ld_insn(enum insn_type type, enum machine_reg reg, struct stack_slot *slot, struct insn *insn)
{
	assert_int_equals(type, insn->type);
	assert_int_equals(reg, mach_reg(&insn->x.reg));
	assert_ptr_equals(slot, insn->y.slot); 
}