op1 = expand_normal (arg1);
op2 = expand_normal (arg2);
+ if (GET_MODE (op1) != Pmode)
+ op1 = convert_to_mode (Pmode, op1, 1);
+
if (!address_operand (op2, VOIDmode))
{
op2 = convert_memory_address (Pmode, op2);
emit_label (ok_label);
emit_insn (gen_rtx_SET (target, pat));
+ if (GET_MODE (op0) != Pmode)
+ op0 = convert_to_mode (Pmode, op0, 1);
+
for (i = 0; i < 8; i++)
{
op = gen_rtx_MEM (V2DImode,
if (!REG_P (op0))
op0 = copy_to_mode_reg (SImode, op0);
+ if (GET_MODE (op2) != Pmode)
+ op2 = convert_to_mode (Pmode, op2, 1);
+
op = gen_rtx_REG (V2DImode, GET_SSE_REGNO (0));
emit_move_insn (op, op1);
if (!REG_P (op0))
op0 = copy_to_mode_reg (SImode, op0);
+ if (GET_MODE (op3) != Pmode)
+ op3 = convert_to_mode (Pmode, op3, 1);
+
/* Force to use xmm0, xmm1 for keylow, keyhi*/
op = gen_rtx_REG (V2DImode, GET_SSE_REGNO (0));
emit_move_insn (op, op1);
--- /dev/null
+/* PR target/117418 */
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-maddress-mode=long -mwidekl -mx32" } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-final { scan-assembler-times "aesdec128kl" 1 } } */
+/* { dg-final { scan-assembler-times "aesdec256kl" 1 } } */
+/* { dg-final { scan-assembler-times "aesenc128kl" 1 } } */
+/* { dg-final { scan-assembler-times "aesenc256kl" 1 } } */
+/* { dg-final { scan-assembler-times "encodekey128" 1 } } */
+/* { dg-final { scan-assembler-times "encodekey256" 1 } } */
+
+typedef __attribute__((__vector_size__(16))) long long V;
+V a;
+
+void
+foo()
+{
+ __builtin_ia32_aesdec128kl_u8 (&a, a, &a);
+ __builtin_ia32_aesdec256kl_u8 (&a, a, &a);
+ __builtin_ia32_aesenc128kl_u8 (&a, a, &a);
+ __builtin_ia32_aesenc256kl_u8 (&a, a, &a);
+ __builtin_ia32_encodekey128_u32 (0, a, &a);
+ __builtin_ia32_encodekey256_u32 (0, a, a, &a);
+}