clmulh Carry-less multiply (high-part) clmulh produces the upper half of the 2*XLEN carry-less product This instruction must have data-independent timing when extension Zkt is enabled. Assembly format clmulh xd, xs1, xs2 Decode Variables Bits<5> xs2 = $encoding[24:20]; Bits<5> xs1 = $encoding[19:15]; Bits<5> xd = $encoding[11:7]; Execution if (implemented?(ExtensionName::B) && (CSR[misa].B == 1'b0)) { raise(ExceptionCode::IllegalInstruction, mode(), $encoding); } XReg xs1_val = X[xs1]; XReg xs2_val = X[xs2]; XReg output = 0; for (U32 i = 1; i <= xlen(); i++) { output = (xs2_val : output; } X[xd] = output; Exceptions This instruction may result in the following synchronous exceptions: IllegalInstruction Encoding Defining extension (Zbc || Zbkc) Access M Always Containing profiles Mandatory: None Optional: None