public RegImmInd(RegImmIndOp operation, Register sourceOperand, long immediateOffset, Register baseOperand) {
			switch(sourceOperand.width()) {
			case Byte:
				if(immediateOffset < Byte.MIN_VALUE || immediateOffset > Byte.MAX_VALUE) {
					throw new IllegalArgumentException("immediate operand does not fit into byte");
				}
				break;
			case Word:
				if(immediateOffset < Short.MIN_VALUE || immediateOffset > Short.MAX_VALUE) {
					throw new IllegalArgumentException("immediate operand does not fit into word");
				}
				break;
			case Long:
				if(immediateOffset < Integer.MIN_VALUE || immediateOffset > Integer.MAX_VALUE) {
					throw new IllegalArgumentException("immediate operand does not fit into double word");
				}
				break;
			default:
				// this case is always true by construction
			}
			this.operation = operation;
			this.sourceOperand = sourceOperand;
			this.baseOperand = baseOperand;
			this.immediateOffset = immediateOffset;
		}