protected uint ResolveLabel(CPUx86 cpu, SimOperand operand) { Debug.Assert(operand.IsLabel); uint address = (uint)cpu.GetSymbol(operand.Label).Address; if (operand.IsMemory) { return(Read(cpu, address, operand.Size)); } else { return(address); } }
protected void StoreFloatValue(CPUx86 cpu, SimOperand operand, FloatingValue value, int size) { Debug.Assert(!operand.IsImmediate); if (operand.IsRegister) { var newValue = ((operand.Register) as RegisterFloatingPoint).Value; switch (size) { case 128: newValue = value; break; case 64: newValue.Low = value.Low; break; case 32: newValue.LowF = value.LowF; break; } ((operand.Register) as RegisterFloatingPoint).Value = newValue; } if (operand.IsLabel) { uint address = (uint)cpu.GetSymbol(operand.Label).Address; WriteFloat(cpu, address, value, size); } if (operand.IsMemory) { uint address = GetAddress(cpu, operand); WriteFloat(cpu, address, value, size); } }
protected FloatingValue LoadFloatValue(CPUx86 cpu, SimOperand operand, int size) { if (operand.IsRegister) { return(((operand.Register) as RegisterFloatingPoint).Value); } if (operand.IsLabel) { uint address = (uint)cpu.GetSymbol(operand.Label).Address; return(ReadFloat(cpu, address, size)); } if (operand.IsMemory) { uint address = GetAddress(cpu, operand); return(ReadFloat(cpu, address, size)); } throw new SimCPUException(); }
protected void StoreValue(CPUx86 cpu, SimOperand operand, uint value, int size) { Debug.Assert(!operand.IsImmediate); if (operand.IsRegister) { ((operand.Register) as Register32Bit).Value = value; } else if (operand.IsLabel) { uint address = (uint)cpu.GetSymbol(operand.Label).Address; Write(cpu, address, value, size); return; } else if (operand.IsMemory) { uint address = GetAddress(cpu, operand); Write(cpu, address, value, size); } }
protected FloatingValue LoadFloatValue(CPUx86 cpu, SimOperand operand, int size) { if (operand.IsRegister) { return ((operand.Register) as RegisterFloatingPoint).Value; } if (operand.IsLabel) { uint address = (uint)cpu.GetSymbol(operand.Label).Address; return ReadFloat(cpu, address, size); } if (operand.IsMemory) { uint address = GetAddress(cpu, operand); return ReadFloat(cpu, address, size); } throw new SimCPUException(); }
protected uint ResolveLabel(CPUx86 cpu, SimOperand operand) { Debug.Assert(operand.IsLabel); uint address = (uint)cpu.GetSymbol(operand.Label).Address; if (operand.IsMemory) { return Read(cpu, address, operand.Size); } else { return address; } }
protected void StoreFloatValue(CPUx86 cpu, SimOperand operand, double value, int size) { Debug.Assert(!operand.IsImmediate); if (operand.IsRegister) { ((operand.Register) as RegisterFloatingPoint).Value = value; } if (operand.IsLabel) { uint address = (uint)cpu.GetSymbol(operand.Label).Address; WriteFloat(cpu, address, value, size); } if (operand.IsMemory) { uint address = GetAddress(cpu, operand); WriteFloat(cpu, address, value, size); } }