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

📄 math.c

📁 linux嵌入式课程实践中的一个关于声卡驱动程序 。
💻 C
📖 第 1 页 / 共 5 页
字号:
        FP_DECL_D(DA); FP_DECL_Q(QR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_DP(DA, val);	FP_CONV (Q, D, 4, 2, QR, DA);        FP_PACK_QP(&cvt.ld, QR);        current->thread.fp_regs.fprs[rx].ui = cvt.w.high;        current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;        return _fex;}/* Load lengthened float to long double */static int emu_lxebr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_S(SA); FP_DECL_Q(QR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[ry].f);	FP_CONV (Q, S, 4, 1, QR, SA);        FP_PACK_QP(&cvt.ld, QR);        current->thread.fp_regs.fprs[rx].ui = cvt.w.high;        current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;        return _fex;}/* Load lengthened float to long double */static int emu_lxeb (struct pt_regs *regs, int rx, float *val) {        FP_DECL_S(SA); FP_DECL_Q(QR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, val);	FP_CONV (Q, S, 4, 1, QR, SA);        FP_PACK_QP(&cvt.ld, QR);        current->thread.fp_regs.fprs[rx].ui = cvt.w.high;        current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;        return _fex;}/* Load lengthened float to double */static int emu_ldebr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_S(SA); FP_DECL_D(DR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[ry].f);	FP_CONV (D, S, 2, 1, DR, SA);	FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);        return _fex;}/* Load lengthened float to double */static int emu_ldeb (struct pt_regs *regs, int rx, float *val) {        FP_DECL_S(SA); FP_DECL_D(DR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, val);	FP_CONV (D, S, 2, 1, DR, SA);	FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);        return _fex;}/* Load negative long double */static int emu_lnxbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_Q(QA); FP_DECL_Q(QR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        cvt.w.high = current->thread.fp_regs.fprs[ry].ui;        cvt.w.low = current->thread.fp_regs.fprs[ry+2].ui;        FP_UNPACK_QP(QA, &cvt.ld);        if (QA_s == 0) {		FP_NEG_Q(QR, QA);		FP_PACK_QP(&cvt.ld, QR);		current->thread.fp_regs.fprs[rx].ui = cvt.w.high;		current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;	} else {		current->thread.fp_regs.fprs[rx].ui =			current->thread.fp_regs.fprs[ry].ui;		current->thread.fp_regs.fprs[rx+2].ui =			current->thread.fp_regs.fprs[ry+2].ui;	}	emu_set_CC_cs(regs, QR_c, QR_s);        return _fex;}/* Load negative double */static int emu_lndbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_D(DA); FP_DECL_D(DR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_DP(DA, &current->thread.fp_regs.fprs[ry].d);        if (DA_s == 0) {		FP_NEG_D(DR, DA);		FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);	} else		current->thread.fp_regs.fprs[rx].ui =			current->thread.fp_regs.fprs[ry].ui;	emu_set_CC_cs(regs, DR_c, DR_s);        return _fex;}/* Load negative float */static int emu_lnebr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_S(SA); FP_DECL_S(SR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[ry].f);        if (SA_s == 0) {		FP_NEG_S(SR, SA);		FP_PACK_SP(&current->thread.fp_regs.fprs[rx].f, SR);	} else		current->thread.fp_regs.fprs[rx].ui =			current->thread.fp_regs.fprs[ry].ui;	emu_set_CC_cs(regs, SR_c, SR_s);        return _fex;}/* Load positive long double */static int emu_lpxbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_Q(QA); FP_DECL_Q(QR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        cvt.w.high = current->thread.fp_regs.fprs[ry].ui;        cvt.w.low = current->thread.fp_regs.fprs[ry+2].ui;        FP_UNPACK_QP(QA, &cvt.ld);        if (QA_s != 0) {		FP_NEG_Q(QR, QA);		FP_PACK_QP(&cvt.ld, QR);		current->thread.fp_regs.fprs[rx].ui = cvt.w.high;		current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;	} else{		current->thread.fp_regs.fprs[rx].ui =			current->thread.fp_regs.fprs[ry].ui;		current->thread.fp_regs.fprs[rx+2].ui =			current->thread.fp_regs.fprs[ry+2].ui;	}	emu_set_CC_cs(regs, QR_c, QR_s);        return _fex;}/* Load positive double */static int emu_lpdbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_D(DA); FP_DECL_D(DR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_DP(DA, &current->thread.fp_regs.fprs[ry].d);        if (DA_s != 0) {		FP_NEG_D(DR, DA);		FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);	} else		current->thread.fp_regs.fprs[rx].ui =			current->thread.fp_regs.fprs[ry].ui;	emu_set_CC_cs(regs, DR_c, DR_s);        return _fex;}/* Load positive float */static int emu_lpebr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_S(SA); FP_DECL_S(SR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[ry].f);        if (SA_s != 0) {		FP_NEG_S(SR, SA);		FP_PACK_SP(&current->thread.fp_regs.fprs[rx].f, SR);	} else		current->thread.fp_regs.fprs[rx].ui =			current->thread.fp_regs.fprs[ry].ui;	emu_set_CC_cs(regs, SR_c, SR_s);        return _fex;}/* Load rounded long double to double */static int emu_ldxbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_Q(QA); FP_DECL_D(DR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        cvt.w.high = current->thread.fp_regs.fprs[ry].ui;        cvt.w.low = current->thread.fp_regs.fprs[ry+2].ui;        FP_UNPACK_QP(QA, &cvt.ld);	FP_CONV (D, Q, 2, 4, DR, QA);	FP_PACK_DP(&current->thread.fp_regs.fprs[rx].f, DR);        return _fex;}/* Load rounded long double to float */static int emu_lexbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_Q(QA); FP_DECL_S(SR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        cvt.w.high = current->thread.fp_regs.fprs[ry].ui;        cvt.w.low = current->thread.fp_regs.fprs[ry+2].ui;        FP_UNPACK_QP(QA, &cvt.ld);	FP_CONV (S, Q, 1, 4, SR, QA);	FP_PACK_SP(&current->thread.fp_regs.fprs[rx].f, SR);        return _fex;}/* Load rounded double to float */static int emu_ledbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_D(DA); FP_DECL_S(SR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_DP(DA, &current->thread.fp_regs.fprs[ry].d);	FP_CONV (S, D, 1, 2, SR, DA);	FP_PACK_SP(&current->thread.fp_regs.fprs[rx].f, SR);        return _fex;}/* Multiply long double */static int emu_mxbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_Q(QA); FP_DECL_Q(QB); FP_DECL_Q(QR);        FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        cvt.w.high = current->thread.fp_regs.fprs[rx].ui;        cvt.w.low = current->thread.fp_regs.fprs[rx+2].ui;        FP_UNPACK_QP(QA, &cvt.ld);        cvt.w.high = current->thread.fp_regs.fprs[ry].ui;        cvt.w.low = current->thread.fp_regs.fprs[ry+2].ui;        FP_UNPACK_QP(QB, &cvt.ld);        FP_MUL_Q(QR, QA, QB);        FP_PACK_QP(&cvt.ld, QR);        current->thread.fp_regs.fprs[rx].ui = cvt.w.high;        current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;        return _fex;}/* Multiply double */static int emu_mdbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_D(DA); FP_DECL_D(DB); FP_DECL_D(DR);        FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_DP(DA, &current->thread.fp_regs.fprs[rx].d);        FP_UNPACK_DP(DB, &current->thread.fp_regs.fprs[ry].d);        FP_MUL_D(DR, DA, DB);	FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);        return _fex;}/* Multiply double */static int emu_mdb (struct pt_regs *regs, int rx, double *val) {        FP_DECL_D(DA); FP_DECL_D(DB); FP_DECL_D(DR);        FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_DP(DA, &current->thread.fp_regs.fprs[rx].d);        FP_UNPACK_DP(DB, val);        FP_MUL_D(DR, DA, DB);	FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);        return _fex;}/* Multiply double to long double */static int emu_mxdbr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_D(DA); FP_DECL_Q(QA); FP_DECL_Q(QB); FP_DECL_Q(QR);	FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_DP(DA, &current->thread.fp_regs.fprs[rx].d);	FP_CONV (Q, D, 4, 2, QA, DA);        FP_UNPACK_DP(DA, &current->thread.fp_regs.fprs[ry].d);	FP_CONV (Q, D, 4, 2, QB, DA);        FP_MUL_Q(QR, QA, QB);        FP_PACK_QP(&cvt.ld, QR);        current->thread.fp_regs.fprs[rx].ui = cvt.w.high;        current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;        return _fex;}/* Multiply double to long double */static int emu_mxdb (struct pt_regs *regs, int rx, long double *val) {        FP_DECL_Q(QA); FP_DECL_Q(QB); FP_DECL_Q(QR);        FP_DECL_EX;	mathemu_ldcv cvt;        int mode;	mode = current->thread.fp_regs.fpc & 3;        cvt.w.high = current->thread.fp_regs.fprs[rx].ui;        cvt.w.low = current->thread.fp_regs.fprs[rx+2].ui;        FP_UNPACK_QP(QA, &cvt.ld);        FP_UNPACK_QP(QB, val);        FP_MUL_Q(QR, QA, QB);        FP_PACK_QP(&cvt.ld, QR);        current->thread.fp_regs.fprs[rx].ui = cvt.w.high;        current->thread.fp_regs.fprs[rx+2].ui = cvt.w.low;        return _fex;}/* Multiply float */static int emu_meebr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_S(SA); FP_DECL_S(SB); FP_DECL_S(SR);        FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[rx].f);        FP_UNPACK_SP(SB, &current->thread.fp_regs.fprs[ry].f);        FP_MUL_S(SR, SA, SB);	FP_PACK_SP(&current->thread.fp_regs.fprs[rx].f, SR);        return _fex;}/* Multiply float */static int emu_meeb (struct pt_regs *regs, int rx, float *val) {        FP_DECL_S(SA); FP_DECL_S(SB); FP_DECL_S(SR);        FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[rx].f);        FP_UNPACK_SP(SB, val);        FP_MUL_S(SR, SA, SB);	FP_PACK_SP(&current->thread.fp_regs.fprs[rx].f, SR);        return _fex;}/* Multiply float to double */static int emu_mdebr (struct pt_regs *regs, int rx, int ry) {        FP_DECL_S(SA); FP_DECL_D(DA); FP_DECL_D(DB); FP_DECL_D(DR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[rx].f);	FP_CONV (D, S, 2, 1, DA, SA);        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[ry].f);	FP_CONV (D, S, 2, 1, DB, SA);        FP_MUL_D(DR, DA, DB);	FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);        return _fex;}/* Multiply float to double */static int emu_mdeb (struct pt_regs *regs, int rx, float *val) {        FP_DECL_S(SA); FP_DECL_D(DA); FP_DECL_D(DB); FP_DECL_D(DR);	FP_DECL_EX;        int mode;	mode = current->thread.fp_regs.fpc & 3;        FP_UNPACK_SP(SA, &current->thread.fp_regs.fprs[rx].f);	FP_CONV (D, S, 2, 1, DA, SA);        FP_UNPACK_SP(SA, val);	FP_CONV (D, S, 2, 1, DB, SA);        FP_MUL_D(DR, DA, DB);	FP_PACK_DP(&current->thread.fp_regs.fprs[rx].d, DR);        return _fex;}/* Multiply and add double */static int emu_madbr (struct pt_regs *regs, int rx, int ry, int rz) {        FP_DECL_D(DA); FP_DECL_D(DB); FP_DECL_D(DC); FP_DECL_D(DR);        FP_DECL_EX;        int mode;

⌨️ 快捷键说明

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