public static WordField LoadFromRegister(FieldSpec fieldSpec, Register register) { int fieldSpecByteCount = fieldSpec.ByteCount; if (fieldSpecByteCount > register.ByteCountWithPadding) { throw new ArgumentOutOfRangeException("fieldSpec", fieldSpec, "bytecount too large for this register"); } WordField field = new WordField(fieldSpec, fieldSpecByteCount); int fromRegisterStartIndex = register.ByteCountWithPadding - fieldSpecByteCount; fieldSpecByteCount--; while (fieldSpecByteCount >= 0) { field[fieldSpecByteCount] = register.GetByteWithPadding(fromRegisterStartIndex + fieldSpecByteCount); fieldSpecByteCount--; } if (fieldSpec.IncludesSign) { field.Sign = register.Sign; } return(field); }
public int CompareTo(FullWord toCompare) { WordField field = LoadFromFullWord(mFieldSpec, toCompare); long wordValue = base.LongValue; long fieldValue = field.LongValue; return(wordValue.CompareTo(fieldValue)); }
public static WordField LoadFromFullWord(FieldSpec fieldSpec, FullWord word) { int fieldSpecByteCount = fieldSpec.ByteCount; WordField field = new WordField(fieldSpec, fieldSpecByteCount); int lowBoundByteIndex = fieldSpec.LowBoundByteIndex; for (int i = 0; i < fieldSpecByteCount; i++) { field[i] = word[lowBoundByteIndex + i]; } if (fieldSpec.IncludesSign) { field.Sign = word.Sign; } return(field); }