SHA256RNDS2

执行两轮 SHA256 操作

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
NP 0F 38 CB /rSHA256RNDS2 xmm1, xmm2/m128, <XMM0>RMI有效有效使用xmm1的初始SHA256状态(C,D,G,H)进行2轮SHA256操作,使用xmm2/m128的初始SHA256状态(A,B,E,F)进行2轮操作,并预计算出下2轮 mes-sage dwords和内含的操作数 XMM0的对应圆常数,存储更新的SHA256状态(A,B,E,F)产生xmm1.

操作数编码

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

RMI

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

实测开销

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

说明

SHA256RNDS2指令使用首个操作数的初始SHA256状态(C,D,G,H),第二个操作数的初始SHA256状态(A,B,E,F)进行2轮SHA256操作,并使用默认的操作数 xmm0进行下2个圆电文词和相应圆常数的预计算总和. 请注意,该指令只使用XMM0的两个下字。

更新后的SHA256状态(A,B,E,F)被写入第一个操作数,第二个操作数可以在以后的回合中作为更新的状态(C,D,G,H)使用.

行动

SHA256RNDS2
A_0 := SRC2[127:96];
B_0 := SRC2[95:64];
C_0 := SRC1[127:96];
D_0 := SRC1[95:64];
E_0 := SRC2[63:32];
F_0 := SRC2[31:0];
G_0 := SRC1[63:32];
H_0 := SRC1[31:0];
WK0 := XMM0[31: 0];
WK1 := XMM0[63: 32];

FOR i = 0 to 1
    A_(i +1) := Ch (E_i, F_i, G_i) +1( E_i) +WKi+ H_i + Maj(A_i , B_i, C_i) +0( A_i);
    B_(i +1) := A_i;
    C_(i +1) := B_i ;
    D_(i +1) := C_i;
    E_(i +1) := Ch (E_i, F_i, G_i) +1( E_i) +WKi+ H_i + D_i;
    F_(i +1) := E_i ;
    G_(i +1) := F_i;
    H_(i +1) := G_i;

ENDFOR

DEST[127:96] := A_2;
DEST[95:64] := B_2;
DEST[63:32] := E_2;
DEST[31:0] := F_2;

Intel C/C++ 内在编译器

SHA256RNDS2 __m128i _mm_sha256rnds2_epu32(__m128i, __m128i, __m128i);

受影响的旗帜

None.

SIMD 浮点 例外

None.

其他例外

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

来源