public ImmReg(ImmRegOp operation, long leftOperand, Register rightOperand) {
			switch(rightOperand.width()) {
			case Byte:
				if(leftOperand < Byte.MIN_VALUE || leftOperand > Byte.MAX_VALUE) {
					throw new IllegalArgumentException("immediate operand does not fit into byte");
				}
				break;
			case Word:
				if(leftOperand < Short.MIN_VALUE || leftOperand > Short.MAX_VALUE) {
					throw new IllegalArgumentException("immediate operand does not fit into word");
				}
				break;
			case Long:
				if(leftOperand < Integer.MIN_VALUE || leftOperand > 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.leftOperand = leftOperand;
			this.rightOperand = rightOperand;
		}