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

📄 multiply.c

📁 skyeye的开源代码
💻 C
字号:
#include "emul.h"// Perform long multiplication of x by y.extern MIPS_State * mstate;void multiply_UInt64(UInt64 u, UInt64 v){    	UInt64 u0 = bits(u, 31,  0);    	UInt64 u1 = bits(u, 63, 32);    	UInt64 v0 = bits(v, 31,  0);    	UInt64 v1 = bits(v, 63, 32);    	UInt64 w0 = 0;    	UInt64 w1 = 0;    	UInt64 w2;    	UInt64 w3;    	UInt64 t, k;    	k = 0;    	// i == 0, j == 0    	t  = u0 * v0 + w0 + k;    	w0 = bits(t, 31,  0);    	k  = bits(t, 63, 32);    	// i == 1, j == 0    	t  = u1 * v0 + w1 + k;    	w1 = bits(t, 31,  0);    	k  = bits(t, 63, 32);    	w2 = k;    	k  = 0;    	// i == 0, j == 1    	t  = u0 * v1 + w1 + k;    	w1 = bits(t, 31,  0);    	k  = bits(t, 63, 32);    	// j == 1, i == 1    	t  = u1 * v1 + w2 + k;    	w2 = bits(t, 31,  0);    	k  = bits(t, 63, 32);    	w3 = k;    	// Glue the bits back into full words.    	mstate->lo = w0 | (w1 << 32);    	mstate->hi = w2 | (w3 << 32);}void multiply_Int64(Int64 u, Int64 v){    	// Compute the sign of the result;    	int neg;    	if (u < 0) {		if (v < 0) {	    		neg =0;	    		v = -v;		} else {	    		neg = 1;		}		u = -u;    	} else {		if (v < 0) {	    	neg = 1;	    	v = -v;		} else {	   		 neg =0;		}    	}    	multiply_UInt64((UInt64)u, (UInt64)v);    	if (neg) {		mstate->lo = ~mstate->lo;		mstate->hi = ~mstate->hi;		if (++mstate->lo == 0) {	    		++mstate->hi;		}    	}}

⌨️ 快捷键说明

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