SHA1C
SHA1 hash update (choose)
SHA1 hash update (choose).
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.
0
1
0
1
1
1
1
0
0
0
0
0
0
0
0
0
0
SHA1C <Qd>, <Sn>, <Vm>.4S
if !IsFeatureImplemented(FEAT_SHA1) then UNDEFINED;
constant integer d = UInt(Rd);
constant integer n = UInt(Rn);
constant integer m = UInt(Rm);
<Qd>
Is the 128-bit name of the SIMD&FP source and destination, encoded in the "Rd" field.
<Sn>
Is the 32-bit name of the second SIMD&FP source register, encoded in the "Rn" field.
<Vm>
Is the name of the third SIMD&FP source register, encoded in the "Rm" field.
AArch64.CheckFPAdvSIMDEnabled();
bits(128) x = V[d, 128];
bits(32) y = V[n, 32]; // Note: 32 not 128 bits wide
constant bits(128) w = V[m, 128];
bits(32) t;
for e = 0 to 3
t = SHAchoose(x<63:32>, x<95:64>, x<127:96>);
y = y + ROL(x<31:0>, 5) + t + Elem[w, e, 32];
x<63:32> = ROL(x<63:32>, 30);
<y, x> = ROL(y : x, 32);
V[d, 128] = x;