Hello! > This patch is about to support Intel Key Locker extension. > > Key Locker provides a mechanism to encrypt and decrypt data with an AES key without having access to the raw key value. > > For more details, please refer to https://software.intel.com/content/dam/develop/external/us/en/documents/343965-intel-key-locker-specification.pdf . > > Bootstrap ok, regression test on i386/x86 backend is ok. > > OK for master?
@@ -1414,6 +1418,13 @@ enum reg_class FP_TOP_REG, FP_SECOND_REG, /* %st(0) %st(1) */ FLOAT_REGS, SSE_FIRST_REG, + SSE_SECOND_REG, + SSE_THIRD_REG, + SSE_FOURTH_REG, + SSE_FIFTH_REG, + SSE_SIXTH_REG, + SSE_SEVENTH_REG, + SSE_EIGHTH_REG, NO_REX_SSE_REGS, SSE_REGS, ALL_SSE_REGS, @@ -1474,6 +1485,13 @@ enum reg_class "FP_TOP_REG", "FP_SECOND_REG", \ "FLOAT_REGS", \ "SSE_FIRST_REG", \ + "SSE_SECOND_REG", \ + "SSE_THIRD_REG", \ + "SSE_FOURTH_REG", \ + "SSE_FIFTH_REG", \ + "SSE_SIXTH_REG", \ + "SSE_SEVENTH_REG", \ + "SSE_EIGHTH_REG", \ "NO_REX_SSE_REGS", \ "SSE_REGS", \ "ALL_SSE_REGS", \ @@ -1513,6 +1531,13 @@ enum reg_class { 0x200, 0x0, 0x0 }, /* FP_SECOND_REG */ \ { 0xff00, 0x0, 0x0 }, /* FLOAT_REGS */ \ { 0x100000, 0x0, 0x0 }, /* SSE_FIRST_REG */ \ + { 0x200000, 0x0, 0x0 }, /* SSE_SECOND_REG */ \ + { 0x400000, 0x0, 0x0 }, /* SSE_THIRD_REG */ \ + { 0x800000, 0x0, 0x0 }, /* SSE_FOURTH_REG */ \ + { 0x1000000, 0x0, 0x0 }, /* SSE_FIFTH_REG */ \ + { 0x2000000, 0x0, 0x0 }, /* SSE_SIXTH_REG*/ \ + { 0x4000000, 0x0, 0x0 }, /* SSE_SEVENTH_REG */ \ + { 0x8000000, 0x0, 0x0 }, /* SSE_EIGHTH_REG */ \ { 0xff00000, 0x0, 0x0 }, /* NO_REX_SSE_REGS */ \ { 0xff00000, 0xff000, 0x0 }, /* SSE_REGS */ \ { 0xff00000, 0xfffff000, 0xf }, /* ALL_SSE_REGS */ \ IIRC, adding a new regclass is O(n^2), so it should be avoided. I think that the new patterns should follow the same path as vzeroall and vzeroupper patterns, where we emit the pattern with explicit hard regs. BTW: We do have SSE_FIRST_REG class, but this class was added to solve some reload problems in the past by marking %xmm0 as likely spilled. Uros.