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

📄 fppalib.s

📁 VxWorks BSP框架源代码包含头文件和驱动
💻 S
📖 第 1 页 / 共 2 页
字号:
	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/5:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	and	t3, t0, GENERAL_OPCODE_MASK	/* get branch opcode	*/	beq	t3, BNE_INSTR,1f	bne	t3, BNEL_INSTR,6f		/* are we bne/bnel instr */1:	and	t2, t0, RS_MASK			/* look at RS only	*/	srl	t2, (RS_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RS register	*/	move	t4, v0				/* store value in t4	*/	and	t2, t0, RT_MASK			/* look at RT only	*/	srl	t2, (RT_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RT register	*/	move	t5, v0				/* store value in t5	*/	beq	t4, t5, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/6:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	and	t3, t0, GENERAL_OPCODE_MASK	/* get branch opcode	*/	beq	t3, BLEZ_INSTR,1f	bne	t3, BLEZL_INSTR,7f		/* are we blez/blezl instr */1:	and	t2, t0, RS_MASK			/* look at RS only	*/	srl	t2, (RS_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RS register	*/	move	t4, v0				/* store value in t4	*/	bgtz	t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/7:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	or	t1, t0, REGIMM			/* turn on REGIMM bits  */	and	t2, t1, RS_MASK			/* mask RS bits         */	beq	t2, BGEZ_INSTR, 1f	bne	t2, BGEZL_INSTR, 8f		/* are we bgez/bgezl instr */1:	and	t2, t0, RS_MASK			/* look at RS only	*/	srl	t2, (RS_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RS register	*/	move	t4, v0				/* store value in t4	*/	bltz	t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/8:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	or	t1, t0, REGIMM			/* turn on REGIMM bits  */	and	t2, t1, RS_MASK			/* mask RS bits         */	beq	t2, BLTZ_INSTR, 1f	bne	t2, BLTZL_INSTR, 9f		/* are we bltz/bltzl instr */1:	and	t2, t0, RS_MASK			/* look at RS only	*/	srl	t2, (RS_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RS register	*/	move	t4, v0				/* store value in t4	*/	bgez	t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/9:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	and	t3, t0, GENERAL_OPCODE_MASK	/* get branch opcode	*/	beq	t3, BGTZ_INSTR, 1f	bne	t3, BGTZL_INSTR, 10f		/* are we bgtz/bgtzl instr */1:	and	t2, t0, RS_MASK			/* look at RS only	*/	srl	t2, (RS_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RS register	*/	move	t4, v0				/* store value in t4	*/	blez	t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/10:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	and	t1, t0, ~CC_MASK		/* mask off bits 18-20  */		beq     t1, BC1F_INSTR, 1f	bne	t1, BC1FL_INSTR, 11f		/* are we bc1f/bc1fl instr */1:	and	t4, a2, CP1_VALUE		/* is fpa true		*/	bne	zero, t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/11:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	and	t1, t0, ~CC_MASK		/* mask off bits 18-20  */	beq	t1, BC1T_INSTR, 1f	bne	t1, BC1TL_INSTR, 12f		/* are we bc1t/bc1tl instr	*/1:	and	t4, a2, CP1_VALUE		/* is fpa true		*/	beq	zero, t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/12:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	or	t1, t0, REGIMM			/* turn on REGIMM bits  */	and	t2, t1, RS_MASK			/* mask RS bits         */	beq	t2, BLTZAL_INSTR, 1f	bne	t2, BLTZALL_INSTR, 13f		/* are we bltzal/bltzall instr */1:	and	t2, t0, RS_MASK			/* look at RS only	*/	srl	t2, (RS_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RS register	*/	move	t4, v0				/* store value in t4	*/	bgez	t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addu	t2, t1, 8			/* increment epc for ra */	sw	t2, E_STK_RA(a0)		/* replace ra	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/13:	and	t0, a1, (OFFSET16_MASK << 16)	/* mask high 16 bits	*/	or	t1, t0, REGIMM			/* turn on REGIMM bits  */	and	t2, t1, RS_MASK			/* mask RS bits         */	beq	t2, BGEZAL_INSTR,1f	bne	t2, BGEZALL_INSTR,14f		/* are we bgtzal/bgtzall instr */1:	and	t2, t0, RS_MASK			/* look at RS only	*/	srl	t2, (RS_POS - 2)	lw	t2, regFetchIndexTbl(t2)	/* get routine address	*/	jalr	t7, t2				/* read RS register	*/	move	t4, v0				/* store value in t4	*/	bltz	t4, 15f 			/* don't take branch	*/	and	a1, OFFSET16_MASK		/* look at ls 16 bits	*/	sll	a1, IMMEDIATE_POS		/* sign extend	*/	sra	a1, IMMEDIATE_POS - 2	lw	t1, E_STK_EPC(a0)		/* grab epc	*/	addu	t2, t1, 8			/* increment epc for ra */	sw	t2, E_STK_RA(a0)		/* replace ra	*/	addiu	t1, t1, 4			/* calculate BD slot addr */	addu	v0, t1, a1			/* calculate new epc */	j	ra				/* return	*/#endif	/* !SOFT_FLOAT */14:	/* it wasn't a branch that we recognised! */	li	v0, 1				/* give up	*/15:	j	ra				/* return to caller	*/	.end	fppEmulateBranch/********************************************************************************* regFetchTable - returns the contents of a given register** This routine has 32 entry points, one for each r3k general purpose* register.  The user interface is to jal to the register offset of* regFetchIndexTbl, and expect results in v0.  The return address register* t7 is uses so we do not have to set up a stack frame.** RETURNS: contents of given register** NOMANUAL - not really a routine but a jump table*/	.ent	regFetchTableregFetchTable:reg0:	move	v0, zero	j	t7reg1:	LW	v0,E_STK_AT(a0)	j	t7reg2:	LW	v0,E_STK_V0(a0)	j	t7reg3:	LW	v0,E_STK_V1(a0)	j	t7reg4:	LW	v0,E_STK_A0(a0)	j	t7reg5:	LW	v0,E_STK_A1(a0)	j	t7reg6:	LW	v0,E_STK_A2(a0)	j	t7reg7:	LW	v0,E_STK_A3(a0)	j	t7reg8:	LW	v0,E_STK_T0(a0)	j	t7reg9:	LW	v0,E_STK_T1(a0)	j	t7reg10:	LW	v0,E_STK_T2(a0)	j	t7reg11:	LW	v0,E_STK_T3(a0)	j	t7reg12:	LW	v0,E_STK_T4(a0)	j	t7reg13:	LW	v0,E_STK_T5(a0)	j	t7reg14:	LW	v0,E_STK_T6(a0)	j	t7reg15:	LW	v0,E_STK_T7(a0)	j	t7reg16:	LW	v0,E_STK_S0(a0)	j	t7reg17:	LW	v0,E_STK_S1(a0)	j	t7reg18:	LW	v0,E_STK_S2(a0)	j	t7reg19:	LW	v0,E_STK_S3(a0)	j	t7reg20:	LW	v0,E_STK_S4(a0)	j	t7reg21:	LW	v0,E_STK_S5(a0)	j	t7reg22:	LW	v0,E_STK_S6(a0)	j	t7reg23:	LW	v0,E_STK_S7(a0)	j	t7reg24:	LW	v0,E_STK_T8(a0)	j	t7reg25:	LW	v0,E_STK_T9(a0)	j	t7reg26:	LW	v0,E_STK_K0(a0)	j	t7reg27:	LW	v0,E_STK_K1(a0)	j	t7reg28:	LW	v0,E_STK_GP(a0)	j	t7reg29:	LW	v0,E_STK_SP(a0)	j	t7reg30:	LW	v0,E_STK_FP(a0)	j	t7reg31:	LW	v0,E_STK_RA(a0)	j	t7	.end	regFetchTable/********************************************************************************* regJumpTable - excecution code for jump instruction execution** This routine contains the local symbols used by regJmpIndexTbl to determine* what action should be taken by certain MIPS instructions.  This routine is* not callable by any "C" or assembler routines.** RETURNS: N/A** NOMANUAL - not really a routine but a jump table*/	.ent	regJumpTableregJumpTable:jreg0:	lw	t1,E_STK_ZERO(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg1:	lw	t1,E_STK_AT(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg2:	lw	t1,E_STK_V0(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg3:	lw	t1,E_STK_V1(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg4:	lw	t1,E_STK_A0(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg5:	lw	t1,E_STK_A1(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg6:	lw	t1,E_STK_A2(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg7:	lw	t1,E_STK_A3(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg8:	lw	t1,E_STK_T0(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg9:	lw	t1,E_STK_T1(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg10:	lw	t1,E_STK_T2(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg11:	lw	t1,E_STK_T3(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg12:	lw	t1,E_STK_T4(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg13:	lw	t1,E_STK_T5(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg14:	lw	t1,E_STK_T6(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg15:	lw	t1,E_STK_T7(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg16:	lw	t1,E_STK_S0(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg17:	lw	t1,E_STK_S1(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg18:	lw	t1,E_STK_S2(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg19:	lw	t1,E_STK_S3(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg20:	lw	t1,E_STK_S4(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg21:	lw	t1,E_STK_S5(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg22:	lw	t1,E_STK_S6(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg23:	lw	t1,E_STK_S7(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg24:	lw	t1,E_STK_T8(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg25:	lw	t1,E_STK_T9(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg26:	lw	t1,E_STK_K0(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg27:	lw	t1,E_STK_K1(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg28:	lw	t1,E_STK_GP(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg29:	lw	t1,E_STK_SP(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg30:	lw	t1,E_STK_FP(a0)	sw	t1,E_STK_EPC(a0)	j	rajreg31:	lw	t1,E_STK_RA(a0)	sw	t1,E_STK_EPC(a0)	j	ra	.end	regJumpTable	.data	.align	4regJmpIndexTbl:	.word	jreg0	.word	jreg1	.word	jreg2	.word	jreg3	.word	jreg4	.word	jreg5	.word	jreg6	.word	jreg7	.word	jreg8	.word	jreg9	.word	jreg10	.word	jreg11	.word	jreg12	.word	jreg13	.word	jreg14	.word	jreg15	.word	jreg16	.word	jreg17	.word	jreg18	.word	jreg19	.word	jreg20	.word	jreg21	.word	jreg22	.word	jreg23	.word	jreg24	.word	jreg25	.word	jreg26	.word	jreg27	.word	jreg28	.word	jreg29	.word	jreg30	.word	jreg31	.data	.align	4regFetchIndexTbl:	.word	reg0	.word	reg1	.word	reg2	.word	reg3	.word	reg4	.word	reg5	.word	reg6	.word	reg7	.word	reg8	.word	reg9	.word	reg10	.word	reg11	.word	reg12	.word	reg13	.word	reg14	.word	reg15	.word	reg16	.word	reg17	.word	reg18	.word	reg19	.word	reg20	.word	reg21	.word	reg22	.word	reg23	.word	reg24	.word	reg25	.word	reg26	.word	reg27	.word	reg28	.word	reg29	.word	reg30	.word	reg31

⌨️ 快捷键说明

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