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

📄 integerunit.cpp

📁 ppc750 system design simulator using system c
💻 CPP
📖 第 1 页 / 共 3 页
字号:
							if(src < 0 && (src << (32 - n)) != 0) ca = true; else ca = false;						}												lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;						break;												}						case ID_SRAWI:					{						int b = operation.extra.shift.sh & 31;												result32 = (SInt32) operands.data[0] >> b;						ca = (b != 0) && ((SInt32) result32 < 0) && ((operands.data[0] << (32 - operation.extra.shift.sh)) != 0);						latency = 1;					}					break;								case ID_SRAWID:					{						int b = operation.extra.shift.sh & 31;												result32 = (SInt32) operands.data[0] >> b;						ca = (b != 0) && ((SInt32) result32 < 0) && ((operands.data[0] << (32 - operation.extra.shift.sh)) != 0);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);												latency = 1;					}					break;				case ID_CNTLZW:					{						UInt32 n = 0;						UInt32 m = 1 << 31;						while(n < 32)						{							if(operands.data[0] & m) break;							m >>= 1;							n++;						}						result32 = n;					}					latency = 1;					break;					case ID_CNTLZWD:					{						UInt32 n = 0;						UInt32 m = 1 << 31;						while(n < 32)						{							if(operands.data[0] & m) break;							m >>= 1;							n++;						}						result32 = n;					}					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;									case ID_AND:					result32 = operands.data[0] & operands.data[1];					latency = 1;					break;									case ID_ANDD:					result32 = operands.data[0] & operands.data[1];					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;								case ID_ANDC:					result32 = operands.data[0] & ~(operands.data[1]);					latency = 1;					break;							case ID_ANDCD:					result32 = operands.data[0] & ~(operands.data[1]);					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;									case ID_MULHW:					result32 = (UInt32)(((SInt64)(SInt32) operands.data[0] * (SInt64)(SInt32) operands.data[1]) >> 32);					latency = GetMulLatency(operands.data[0], operands.data[1]);					break;						case ID_MULHWD:					result64 = (UInt64)(((SInt64)(SInt32) operands.data[0] * (SInt64)(SInt32) operands.data[1]) >> 32);										lt = ((SInt32) result64 < 0);					gt = ((SInt32) result64 > 0);					eq = ((UInt32) result64 == 0);					result32 = (UInt32) result64;					latency = GetMulLatency(operands.data[0], operands.data[1]);					break;									case ID_NOR:					result32 = ~(operands.data[0] | operands.data[1]);					latency = 1;					break;						case ID_NORD:					result32 = ~(operands.data[0] | operands.data[1]);					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;								case ID_SUBF:					result32 = operands.data[1] - operands.data[0];					latency = 1;					break;							case ID_SUBFD:					result32 = operands.data[1] - operands.data[0];					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;							case ID_SUBFO:					result32 = operands.data[1] - operands.data[0];					ov = Underflow(operands.data[1], operands.data[0]);					latency = 1;					break;							case ID_SUBFOD:					result32 = operands.data[1] - operands.data[0];					ov = Underflow(operands.data[1], operands.data[0]);					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;									case ID_NEG:					if(operands.data[0] != 0x80000000)					{						result32 = (~operands.data[0]) + 1;					}					else					{						result32 = 0x80000000;					}					latency = 1;					break;						case ID_NEGD:					result32 = -operands.data[0];					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;						case ID_NEGO:					result32 = -operands.data[0];					ov = operands.data[0] == 0x80000000;					latency = 1;					break;							case ID_NEGOD:					result32 = -operands.data[0];					ov = operands.data[0] == 0x80000000;					lt = ((SInt32) result32 < 0);					gt = ((SInt32) result32 > 0);					eq = ((UInt32) result32 == 0);					latency = 1;					break;									case ID_SUBFE:					{						UInt32 a = ~operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						latency = 1;					}					break;							case ID_SUBFED:					{						UInt32 a = ~operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;							case ID_SUBFEO:					{						UInt32 a = ~operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						ov = Overflow(b, a) || Overflow(b + a, c);						latency = 1;					}					break;							case ID_SUBFEOD:					{						UInt32 a = ~operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						ov = Overflow(b, a) || Overflow(b + a, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;				case ID_ADDE:					{						UInt32 a = operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						latency = 1;					}					break;						case ID_ADDED:					{						UInt32 a = operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;							case ID_ADDEO:					{						UInt32 a = operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						ov = Overflow(a, b) || Overflow(a + b, c);						latency = 1;					}					break;							case ID_ADDEOD:					{						UInt32 a = operands.data[0];						UInt32 b = operands.data[1];						UInt32 c = inCarry ? 1 : 0;						result32 = a + b + c;						ca = Carry(a, b) || Carry(a + b, c);						ov = Overflow(a, b) || Overflow(a + b, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;									case ID_SUBFZE:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						latency = 1;					}					break;									case ID_SUBFZED:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;																	case ID_SUBFZEO:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						ov = Overflow(a, c);						latency = 1;					}					break;				case ID_SUBFZEOD:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						ov = Overflow(a, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;										case ID_ADDZE:					{						UInt32 a = operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						latency = 1;					}					break;									case ID_ADDZED:					{						UInt32 a = operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;																	case ID_ADDZEO:					{						UInt32 a = operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						ov = Overflow(a, c);						latency = 1;					}					break;				case ID_ADDZEOD:					{						UInt32 a = operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c;						ca = Carry(a, c);						ov = Overflow(a, c);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;										case ID_SUBFME:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c - 1;						ca = Carry(a, c - 1);						latency = 1;					}					break;									case ID_SUBFMED:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c - 1;						ca = Carry(a, c - 1);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;																		case ID_SUBFMEO:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c - 1;						ca = Carry(a, c - 1);						ov = Overflow(a, c - 1);						latency = 1;					}					break;					case ID_SUBFMEOD:					{						UInt32 a = ~operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c - 1;						ca = Carry(a, c - 1);						ov = Overflow(a, c - 1);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;																	case ID_ADDME:					{						UInt32 a = operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c - 1;						ca = Carry(a, c - 1);						latency = 1;					}					break;									case ID_ADDMED:					{						UInt32 a = operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c - 1;						ca = Carry(a, c - 1);						lt = ((SInt32) result32 < 0);						gt = ((SInt32) result32 > 0);						eq = ((UInt32) result32 == 0);						latency = 1;					}					break;																		case ID_ADDMEO:					{						UInt32 a = operands.data[0];						UInt32 c = inCarry ? 1 : 0;						result32 = a + c - 1;						ca = Carry(a, c - 1);						ov = Overflow(a, c - 1);

⌨️ 快捷键说明

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