📄 arm_gen.cpp
字号:
buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (READ_REG(%u)>>%u));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15, (inst>>7)&31); return buf;}char *emitc_add_sign_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (BIT31(READ_REG(%u))?~0:0));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15); return buf;}char *emitc_add_asr_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + ((int32_t)(READ_REG(%u))>>%u));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15, (inst>>7)&31); return buf;}char *emitc_add_rrx_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + ((READ_REG(%u)>>1)|(C_FLAG<<31)));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15); return buf;}char *emitc_add_ror_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (val32=READ_REG(%u), (val32>>%u)|(val32<<(32-%u))));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15, (inst>>7)&31, (inst>>7)&31); return buf;}char *emitc_add_lsl_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (tmp32<32)?(val32<<tmp32):0));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>8)&15, (inst>>0)&15); return buf;}char *emitc_add_lsr_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (tmp32<32)?(val32>>tmp32):0));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>8)&15, (inst>>0)&15); return buf;}char *emitc_add_asr_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (int32_t)val32>>(tmp32<32?tmp32:31)));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>8)&15, (inst>>0)&15); return buf;}char *emitc_add_ror_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (val32>>(tmp32&0x1f))|(val32<<(32-(tmp32&0x1f)))));\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>8)&15, (inst>>0)&15); return buf;}char *emitc_adds_lsl_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (READ_REG(%u)<<%u);\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&15, (inst>>7)&31, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_zero_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = 0;\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_lsr_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (READ_REG(%u)>>%u);\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&15, (inst>>7)&31, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_sign_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (BIT31(READ_REG(%u))?~0:0);\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&15, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_asr_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = ((int32_t)(READ_REG(%u))>>%u);\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&15, (inst>>7)&31, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_rrx_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = ((READ_REG(%u)>>1)|(C_FLAG<<31));\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&15, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_ror_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (val32=READ_REG(%u), (val32>>%u)|(val32<<(32-%u)));\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&15, (inst>>7)&31, (inst>>7)&31, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_lsl_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (tmp32<32)?(val32<<tmp32):0);\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>8)&15, (inst>>0)&15, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_lsr_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (tmp32<32)?(val32>>tmp32):0);\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>8)&15, (inst>>0)&15, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_asr_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (int32_t)val32>>(tmp32<32?tmp32:31));\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>8)&15, (inst>>0)&15, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adds_ror_mode3_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\n" " tmp32 = (tmp32=READ_REG(%u)&0xFF, val32=READ_REG(%u), (val32>>(tmp32&0x1f))|(val32<<(32-(tmp32&0x1f))));\n" " val32 = READ_REG(%u);\n" " rslt32 = val32 + tmp32;\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, rslt32<val32, (val32^tmp32^-1) & (val32^rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>8)&15, (inst>>0)&15, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adci_imm_mode1_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + %u + C_FLAG);\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&255); return buf;}char *emitc_adci_rot_mode1_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + ((%u>>(%u<<1))|(%u<<(32-(%u<<1)))) + C_FLAG);\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&255, (inst>>8)&15, (inst>>0)&255, (inst>>8)&15); return buf;}char *emitc_adcis_imm_mode1_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\tuint32_t carry;\n"); buf += sprintf(buf, "\n" " tmp32 = %u;\n" " val32 = READ_REG(%u);\n" " if (C_FLAG) {\n" " rslt32 = tmp32+val32+1;\n" " carry = rslt32 <= val32;\n" " }\n" " else {\n" " rslt32 = tmp32+val32;\n" " carry = rslt32 < val32;\n" " }\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, carry, (val32 ^ tmp32 ^ -1) & (val32 ^ rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&255, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adcis_rot_mode1_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\tuint32_t val32;\n"); buf += sprintf(buf, "\tuint32_t tmp32;\n"); buf += sprintf(buf, "\tuint32_t rslt32;\n"); buf += sprintf(buf, "\tuint32_t carry;\n"); buf += sprintf(buf, "\n" " tmp32 = ((%u>>(%u<<1))|(%u<<(32-(%u<<1))));\n" " val32 = READ_REG(%u);\n" " if (C_FLAG) {\n" " rslt32 = tmp32+val32+1;\n" " carry = rslt32 <= val32;\n" " }\n" " else {\n" " rslt32 = tmp32+val32;\n" " carry = rslt32 < val32;\n" " }\n" " if (%u==15)\n" " WRITE_CPSR(SPSR);\n" " else\n" " ASGN_NZCV(rslt32, carry, (val32 ^ tmp32 ^ -1) & (val32 ^ rslt32));\n" " WRITE_REG(%u, rslt32);\n" "", (inst>>0)&255, (inst>>8)&15, (inst>>0)&255, (inst>>8)&15, (inst>>16)&15, (inst>>12)&15, (inst>>12)&15); return buf;}char *emitc_adc_lsl_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (READ_REG(%u)<<%u) + C_FLAG);\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15, (inst>>7)&31); return buf;}char *emitc_adc_zero_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + 0 + C_FLAG);\n" "", (inst>>12)&15, (inst>>16)&15); return buf;}char *emitc_adc_lsr_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (READ_REG(%u)>>%u) + C_FLAG);\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15, (inst>>7)&31); return buf;}char *emitc_adc_sign_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + (BIT31(READ_REG(%u))?~0:0) + C_FLAG);\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15); return buf;}char *emitc_adc_asr_mode2_(char *buf, unsigned curpc, target_inst_t inst, unsigned size){ buf += sprintf(buf, "\n" " WRITE_REG(%u, READ_REG(%u) + ((int32_t)(READ_REG(%u))>>%u) + C_FLAG);\n" "", (inst>>12)&15, (inst>>16)&15, (inst>>0)&15, (inst>>7)&31); return buf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -