UMULH Unsigned multiply high This instruction multiplies two 64-bit register values, and writes bits[127:64] of the 128-bit result to the 64-bit destination register. If PSTATE.DIT is 1: The execution time of this instruction is independent of: The values of the data supplied in any of its registers. The values of the NZCV flags. The response of this instruction to asynchronous exceptions does not vary based on: The values of the data supplied in any of its registers. The values of the NZCV flags. 1 0 0 1 1 0 1 1 1 1 0 0 (1) (1) (1) (1) (1) UMULH <Xd>, <Xn>, <Xm> constant integer d = UInt(Rd); constant integer n = UInt(Rn); constant integer m = UInt(Rm); <Xd> Is the 64-bit name of the general-purpose destination register, encoded in the "Rd" field. <Xn> Is the 64-bit name of the first general-purpose source register holding the multiplicand, encoded in the "Rn" field. <Xm> Is the 64-bit name of the second general-purpose source register holding the multiplier, encoded in the "Rm" field. constant bits(64) operand1 = X[n, 64]; constant bits(64) operand2 = X[m, 64]; constant integer result = UInt(operand1) * UInt(operand2); X[d, 64] = result<127:64>;