Clear odata for aes(enc|dec)(wide)?kl intrinsics when ZF is set.
authorHongyu Wang <hongyu.wang@intel.com>
Wed, 30 Jun 2021 06:38:31 +0000 (14:38 +0800)
committerliuhongt <hongtao.liu@intel.com>
Fri, 2 Jul 2021 06:32:56 +0000 (14:32 +0800)
commit1aeefa5720a71e622e2f26bf10ec8e7ecbd76f4c
treed1cca20e8b8850c9747f5fc4eb15b123239744d0
parent01d402c5e0ac1ddf5618bbe316b50067625fda46
Clear odata for aes(enc|dec)(wide)?kl intrinsics when ZF is set.

For Keylocker aesenc/aesdec intrinsics, current implementation
moves idata to odata unconditionally, which causes safety issue when
the instruction meets runtime error. So we add a branch to clear
odata when ZF is set after instruction exectution.

gcc/ChangeLog:

* config/i386/i386-expand.c (ix86_expand_builtin):
Add branch to clear odata when ZF is set for asedecenc_expand
and wideaesdecenc_expand.

gcc/testsuite/ChangeLog:

* gcc.target/i386/keylocker-aesdec128kl.c: Update test.
* gcc.target/i386/keylocker-aesdec256kl.c: Likewise.
* gcc.target/i386/keylocker-aesdecwide128kl.c: Likewise.
* gcc.target/i386/keylocker-aesdecwide256kl.c: Likewise.
* gcc.target/i386/keylocker-aesenc128kl.c: Likewise.
* gcc.target/i386/keylocker-aesenc256kl.c: Likewise.
* gcc.target/i386/keylocker-aesencwide128kl.c: Likewise.
* gcc.target/i386/keylocker-aesencwide256kl.c: Likewise.
gcc/config/i386/i386-expand.c
gcc/testsuite/gcc.target/i386/keylocker-aesdec128kl.c
gcc/testsuite/gcc.target/i386/keylocker-aesdec256kl.c
gcc/testsuite/gcc.target/i386/keylocker-aesdecwide128kl.c
gcc/testsuite/gcc.target/i386/keylocker-aesdecwide256kl.c
gcc/testsuite/gcc.target/i386/keylocker-aesenc128kl.c
gcc/testsuite/gcc.target/i386/keylocker-aesenc256kl.c
gcc/testsuite/gcc.target/i386/keylocker-aesencwide128kl.c
gcc/testsuite/gcc.target/i386/keylocker-aesencwide256kl.c