SHA1RNDS4

执行 SHA1 四轮操作

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
NP 0F 3A CC /r ibSHA1RNDS4 xmm1, xmm2/m128, imm8RMI有效有效从 xmm1 执行 SHA1 运行在 SHA1 状态(A,B,C,D)上的四轮 SHA1 操作,其前置共值为 xmm2/m128 的下4 个回合消息词和状态变量 E. 即时字节控制逻辑函数和回合常数.

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

RMI

  1. modrm.reg lectura y escrituraModRM 字节的 reg 字段(第 5-3 位)
  2. modrm.rm lecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
  3. imm8指令后的立即数字节

实测开销

正在从 arch-data 加载实测数据...

说明

SHA1RNDS4指令使用第一个操作数的初始SHA1状态(A,B,C,D)进行四轮SHA1操作(它是一个源操作数和目标操作数),并预算下4个圆电文双字的和数,以及第二个操作数(a 源操作数)的变数E. 经过四轮处理后更新的SHA1状态(A,B,C,D)被存储在目标操作数中.

行动

SHA1RNDS4
The function f() and Constant K are dependent on the value of the immediate.

IF ( imm8[1:0] = 0 )
    THEN f() := f0(), K := K0;

ELSE IF ( imm8[1:0] = 1 )
    THEN f() := f1(), K := K1;

ELSE IF ( imm8[1:0] = 2 )
    THEN f() := f2(), K := K2;

ELSE IF ( imm8[1:0] = 3 )
    THEN f() := f3(), K := K3;

FI;

A := SRC1[127:96];
B := SRC1[95:64];
C := SRC1[63:32];
D := SRC1[31:0];
W0E := SRC2[127:96];
W1 := SRC2[95:64];
W2 := SRC2[63:32];
W3 := SRC2[31:0];

Round i = 0 operation:
A_1 := f (B, C, D) + (A ROL 5) +W0E +K;
B_1 := A;
C_1 := B ROL 30;
D_1 := C;
E_1 := D;

FOR i = 1 to 3
    A_(i +1) := f (B_i, C_i, D_i) + (A_i ROL 5) +Wi+ E_i +K;


    B_(i +1) := A_i;
    C_(i +1) := B_i ROL 30;
    D_(i +1) := C_i;
    E_(i +1) := D_i;
ENDFOR

DEST[127:96] := A_4;
DEST[95:64] := B_4;
DEST[63:32] := C_4;
DEST[31:0] := D_4;

Intel C/C++ 内在编译器

SHA1RNDS4 __m128i _mm_sha1rnds4_epu32(__m128i, __m128i, const int);

受影响的旗帜

None.

SIMD 浮点 例外

None.

其他例外

参见表2-21"第4类例外条件".

来源