From patchwork Mon Nov 11 01:39:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hu, Lin1" X-Patchwork-Id: 2009353 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=mceUS7Bv; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XmsjC45Xgz1xyD for ; Mon, 11 Nov 2024 12:41:50 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E05F93858C98 for ; Mon, 11 Nov 2024 01:41:47 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by sourceware.org (Postfix) with ESMTPS id 175413858D21 for ; Mon, 11 Nov 2024 01:39:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 175413858D21 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 175413858D21 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.16 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731289235; cv=none; b=EzZQ24v7mSoa7GQvcVaHKXtutwlk7+K34JWgY4VczDnZaI6+UeXIp0RiqQ/O1hGiOKtIxekCWdi1igPQC8p4KlzZjeDefgD+e9l+7ptBO9k+f/JSF8klcVeWyp5CJInpLlpLeOm2Sl0kl2edV7OX2XVCCfcXsYGc/2CQQc/Yd5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731289235; c=relaxed/simple; bh=olKrenTc5dX1fqY0yiU1lH4Wj+Q92NMzUWFK9bSjHJM=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=qrGq5h4ZolDU4D+GgYj46JwqG1Bxq9dZqBe2AxtdKjcCKJCmnmgcBcKRj5bhSQQjHjIwYUw2+J0vDwZCZ4BoZ/jQJrDC/JjM+5Pa+4onKf7pMq92Kw9lE34iOBPcNBXLyHyT7HxgYrEHH7LVAFTmg8M+uzPrXUiu9J31+iBZOqU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1731289197; x=1762825197; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=olKrenTc5dX1fqY0yiU1lH4Wj+Q92NMzUWFK9bSjHJM=; b=mceUS7BvD0nD730EKWBqBQJad2uyBnWVlDtMqzNr3NOxxGE/ysPKvys2 JbyZW+DGpxMaYIrLfYNgYxdNRBJYzrlVePkefviC7EchTXITRTxZNWPmm NSZbUNKBSkZINPTXv4L4ivb1FA+Vo9vWLgDoC4dGtFTf+97VDCyHVi0J3 V93sQVau7IeLBHaR9naD6MOSEhKavc8gWnb9L2rvhV0jwda7n26X4OZJL 52U53tggKppxwvqjtlWShqJsBcOY3kd0hJIRDiz6qy6iey2gFl6EHnDym ZaVK36i5bLDw5vUSnDokm8h2tL3rZsRFBV2Qr8WePvyx3oW6A2F+1wVel Q==; X-CSE-ConnectionGUID: 9htbGiD8RXW2LbkMCoNkLA== X-CSE-MsgGUID: rQMD9wvTTh6gRzdMQWgBXg== X-IronPort-AV: E=McAfee;i="6700,10204,11252"; a="18710557" X-IronPort-AV: E=Sophos;i="6.12,144,1728975600"; d="scan'208";a="18710557" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Nov 2024 17:39:55 -0800 X-CSE-ConnectionGUID: LJsCW7hkTBervkUsVUg30w== X-CSE-MsgGUID: vlABpwhTTAeEQEBccdanGA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,144,1728975600"; d="scan'208";a="117495252" Received: from shliclel4217.sh.intel.com ([10.239.240.127]) by orviesa002.jf.intel.com with ESMTP; 10 Nov 2024 17:39:54 -0800 From: "Hu, Lin1" To: gcc-patches@gcc.gnu.org Cc: hongtao.liu@intel.com, ubizjak@gmail.com, hjl.tools@gmail.com Subject: [PATCH v3] i386: Zero extend 32-bit address to 64-bit with option -mx32 -maddress-mode=long. [PR 117418] Date: Mon, 11 Nov 2024 09:39:53 +0800 Message-Id: <20241111013953.3934150-1-lin1.hu@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org OK, added check for target. Bootstrapped and Regtested on x86-64-linux-pc-gnu, OK for trunk? BRs, Lin -maddress-mode=long let Pmode = DI_mode, so zero extend 32-bit address to 64-bit and uses a 64-bit register as a pointer for avoid raise an ICE. gcc/ChangeLog: PR target/117418 * config/i386/i386-expand.cc (ix86_expand_builtin): Convert pointer's mode according to Pmode. gcc/testsuite/ChangeLog: PR target/117418 * gcc.target/i386/pr117418-1.c: New test. --- gcc/config/i386/i386-expand.cc | 12 +++++++++++ gcc/testsuite/gcc.target/i386/pr117418-1.c | 24 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr117418-1.c diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 6eef27f3fcd..a99ef9613f5 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -14064,6 +14064,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, 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); @@ -14099,6 +14102,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, 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, @@ -14123,6 +14129,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, 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); @@ -14160,6 +14169,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, 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); diff --git a/gcc/testsuite/gcc.target/i386/pr117418-1.c b/gcc/testsuite/gcc.target/i386/pr117418-1.c new file mode 100644 index 00000000000..4839b139b79 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr117418-1.c @@ -0,0 +1,24 @@ +/* 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); +}