public byte[] Not(byte[] a) { byte[] result = new byte[a.Length]; for (int i = 0; i < a.Length; i++) { result[i] = (byte)(~a[i]); } flags = ALUFlags.None; return(result); }
public byte[] Negate(byte[] a) { int64_t _a = new int64_t(a); int64_t result = -_a; byte[] r = result.ToBinary(); byte[] values; values = new byte[a.Length]; Array.Copy(r, values, values.Length); flags = ALUFlags.None; return(values); }
public byte[] Add(byte[] a, byte[] b, out bool overflow) { uint64_t _a = new uint64_t(a); uint64_t _b = new uint64_t(b); uint64_t result = _a + _b; byte[] r = result.ToBinary(); byte[] values; overflow = false; if (a.Length >= b.Length) { values = new byte[a.Length]; } else { values = new byte[b.Length]; } Array.Copy(r, values, values.Length); if (values.Length < 8) { overflow = (r[values.Length + 1] > 0); } else { try { UInt64 temp = checked (_a + _b); } catch (OverflowException) { overflow = true; flags = flags | ALUFlags.Overflow; } } flags = ALUFlags.None; if (overflow) { flags = flags | ALUFlags.Overflow; } return(values); }
public void Compare(byte[] a, byte[] b) { uint64_t _a = new uint64_t(a); uint64_t _b = new uint64_t(b); flags = ALUFlags.None; if (_a.Value == _b.Value) { flags = flags | ALUFlags.Equal; } if (_a.Value > _b.Value) { flags = flags | ALUFlags.GreaterThan; } if (_a.Value < _b.Value) { flags = flags | ALUFlags.LessThan; } }
public ALU() { flags = ALUFlags.None; }