⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arm2x86_psr.h

📁 这是Skyeye 0.9 版本的源代码
💻 H
字号:
#ifndef _ARM2X86_PSR_H_
#define _ARM2X86_PSR_H_

extern op_table_t	op_set_nf;
extern op_table_t	op_set_zf;
extern op_table_t	op_set_cf;
extern op_table_t	op_set_vf;
extern op_table_t	op_set_nzcf;
extern op_table_t	op_set_nzcvf;

extern op_table_t	op_logic_T0_sn;
extern op_table_t	op_logic_T0_sz;
extern op_table_t	op_logic_T1_sn;
extern op_table_t	op_logic_T1_sz;

extern op_table_t	op_logic_0_sc;
extern op_table_t	op_logic_1_sc;

extern op_table_t	op_logicq_T0_T1_sz;

extern op_table_t	op_mrs_T0_cpsr;
extern op_table_t	op_mrs_T0_spsr;
extern op_table_t	op_msr_spsr_T0_T1;
extern op_table_t	op_msr_cpsr_T0_T1;

//extern op_table_t	op_writesr15;

extern int		arm2x86_psr_init();

static __inline__ uint32_t
gen_op_condition(ARMul_State *state, uint32_t cond)
{
	uint32_t	ret;

	switch(cond) {
		case EQ:
			ret = ZFLAG;
			break;
		case NE:
			ret = !ZFLAG;
			break;
		case VS:
			ret = VFLAG;
			break;
		case VC:
			ret = !VFLAG;
			break;
		case MI:
			ret = NFLAG;
			break;
		case PL:
			ret = !NFLAG;
			break;
		case CS:
			ret = CFLAG;
			break;
		case CC:
			ret = !CFLAG;
			break;
		case HI:
			ret = (CFLAG && !ZFLAG);
			break;
		case LS:
			ret = (!CFLAG || ZFLAG);
			break;
		case GE:
			ret = ((!NFLAG && !VFLAG) || (NFLAG && VFLAG));
			break;
		case LT:
			ret = ((NFLAG && !VFLAG) || (!NFLAG && VFLAG));
			break;
		case GT:
			ret = ((!NFLAG && !VFLAG && !ZFLAG) || (NFLAG && VFLAG && !ZFLAG));
			break;
		case LE:
			ret = ((NFLAG && !VFLAG) || (!NFLAG && VFLAG)) || ZFLAG;
			break;
		default:
			ret = 0;
			break;
	}

	return(ret);
}

#endif	//_ARM2X86_PSR_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -