2 /* { dg-options "-O2 -msha" } */
3 /* { dg-require-effective-target sha } */
6 #include "m128-check.h"
11 ch (int e
, int f
, int g
)
13 return (e
& f
) ^ (~e
& g
);
17 maj (int a
, int b
, int c
)
19 return (a
& b
) ^ (a
& c
) ^ (b
& c
);
25 return __rord (a
, 2) ^ __rord (a
, 13) ^ __rord (a
, 22);
31 return __rord (e
, 6) ^ __rord (e
, 11) ^ __rord (e
, 25);
35 compute_sha256rnds2 (int *src0
, int *src1
, int *src2
, int *res
)
37 int wk
[2] = { src0
[0], src0
[1] };
38 int a
[3], b
[3], c
[3], d
[3], e
[3], f
[3], g
[3], h
[3];
50 for (i
= 0; i
<= 1; i
++)
52 a
[i
+1] = ch (e
[i
], f
[i
], g
[i
]) + s1 (e
[i
]) + wk
[i
] + h
[i
]
53 + maj (a
[i
], b
[i
], c
[i
]) + s0 (a
[i
]);
57 e
[i
+1] = ch (e
[i
], f
[i
], g
[i
]) + s1 (e
[i
]) + wk
[i
] + h
[i
] + d
[i
];
72 union128i_d s0
, s1
, s2
, res
;
75 s0
.x
= _mm_set_epi32 (0, 0, 111, 222);
76 s1
.x
= _mm_set_epi32 (333, 444, 555, 666);
77 s2
.x
= _mm_set_epi32 (777, 888, 999, 123);
79 res
.x
= _mm_sha256rnds2_epu32 (s1
.x
, s2
.x
, s0
.x
);
81 compute_sha256rnds2 (s0
.a
, s1
.a
, s2
.a
, res_ref
);
83 if (check_union128i_d (res
, res_ref
))