From patchwork Thu Sep 7 07:13:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: chenxiaolong X-Patchwork-Id: 1830723 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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 4Rh9V43crLz1yh5 for ; Thu, 7 Sep 2023 17:14:36 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8DCFB3894C18 for ; Thu, 7 Sep 2023 07:14:34 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 4CCB5386545A for ; Thu, 7 Sep 2023 07:13:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4CCB5386545A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.10.130.252]) by gateway (Coremail) with SMTP id _____8Cx5_EqePlk3ichAA--.450S3; Thu, 07 Sep 2023 15:13:46 +0800 (CST) Received: from slurm-master.loongson.cn (unknown [10.10.130.252]) by localhost.localdomain (Coremail) with SMTP id AQAAf8DxDc8eePlkeDVwAA--.7050S6; Thu, 07 Sep 2023 15:13:45 +0800 (CST) From: Xiaolong Chen To: gcc-patches@gcc.gnu.org Subject: [PATCH v1 3/4] LoongArch:Add vector multiplication arithmetic operation SX instruction. Date: Thu, 7 Sep 2023 15:13:10 +0800 Message-Id: <20230907071311.23302-3-chenxiaolong@loongson.cn> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20230907071311.23302-1-chenxiaolong@loongson.cn> References: <20230907071311.23302-1-chenxiaolong@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAf8DxDc8eePlkeDVwAA--.7050S6 X-CM-SenderInfo: hfkh05xldrz0tqj6z05rqj20fqof0/1tbiAQAHBWT5TbUBigAAst X-Coremail-Antispam: 1Uk129KBj97XoW8AF4DKw4DZryfJrW8WoXrpr47Gr43AoWUAa 4UZw4rCFZxX3W5Jw13X343Kr1Yk3Z3Cr17Awn0yw4Dtw4Ivry7ZFsxJF1Utw1ayry3Zw13 Xr4xJ348Zr1kl-sFpf9Il3svdjkaLaAFLSUrUUUUbb8apTn2vfkv8UJUUUU8wcxFpf9Il3 svdxBIdaVrn0xqx4xG64xvF2IEw4CE5I8CrVC2j2Jv73VFW2AGmfu7bjvjm3AaLaJ3UjIY CTnIWjp_UUUY87kC6x804xWl14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcI k0rVWrJVCq3wAFIxvE14AKwVWUGVWUXwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK 021l84ACjcxK6xIIjxv20xvE14v26ryj6F1UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r 4j6F4UM28EF7xvwVC2z280aVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_ Gr1j6F4UJwAS0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07AIYIkI8VC2zVCFFI0UMc 02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUtVWrXwAv7VC2z280aVAF wI0_Gr0_Cr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JMxAIw28IcxkI7V AKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCj r7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0EwIxGrwCI42IY6x IIjxv20xvE14v26ryj6F1UMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6xAI w20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x 0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7IU8QJ57UUUUU== X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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: , Cc: Xiaolong Chen , xuchenghua@loongson.cn, chenglulu@loongson.cn, i@xen0n.name Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" gcc/testsuite/ChangeLog: * gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmul.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c: New test. * gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c: New test. --- .../loongarch/vector/lsx/lsx-vmuh-1.c | 352 ++++++++++++++ .../loongarch/vector/lsx/lsx-vmuh-2.c | 371 +++++++++++++++ .../loongarch/vector/lsx/lsx-vmul.c | 281 ++++++++++++ .../loongarch/vector/lsx/lsx-vmulwev-1.c | 433 ++++++++++++++++++ .../loongarch/vector/lsx/lsx-vmulwev-2.c | 343 ++++++++++++++ .../loongarch/vector/lsx/lsx-vmulwev-3.c | 244 ++++++++++ .../loongarch/vector/lsx/lsx-vmulwod-1.c | 271 +++++++++++ .../loongarch/vector/lsx/lsx-vmulwod-2.c | 281 ++++++++++++ .../loongarch/vector/lsx/lsx-vmulwod-3.c | 307 +++++++++++++ 9 files changed, 2883 insertions(+) create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c new file mode 100644 index 00000000000..21d64bf18c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c @@ -0,0 +1,352 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x059a35ef139a8e00; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x8080808080808080; + *((unsigned long*)& __m128i_op0[0]) = 0x8080808080808080; + *((unsigned long*)& __m128i_op1[1]) = 0x8080808080808080; + *((unsigned long*)& __m128i_op1[0]) = 0x8080808080808080; + *((unsigned long*)& __m128i_result[1]) = 0x4040404040404040; + *((unsigned long*)& __m128i_result[0]) = 0x4040404040404040; + __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xc0c00000c0c00000; + *((unsigned long*)& __m128i_op1[0]) = 0xc0c00c01c2cd0009; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000800; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x000000000000ffff; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xc0fffff000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffe00000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffff0000ac26; + *((unsigned long*)& __m128i_op1[0]) = 0x00ff000000000001; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000000ffffff81fe; + *((unsigned long*)& __m128i_op0[0]) = 0xffffff00ffff7e01; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x000000fffe01fd02; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000ffff0000fe86; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x7f7f7f7f7f7f7f7f; + *((unsigned long*)& __m128i_op1[0]) = 0x7f7f7f7f7f7f7f7f; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xff8000010f800000; + *((unsigned long*)& __m128i_op1[1]) = 0xff800000ff800000; + *((unsigned long*)& __m128i_op1[0]) = 0xff800000ff800000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x00000000fff80000; + __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xbf3efff536d5169b; + *((unsigned long*)& __m128i_op0[0]) = 0x7ebdfffffddf3f40; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x7fff7fff7fff7fff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x3f5ec0a0feefa0b0; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7fffffff7ffffffe; + *((unsigned long*)& __m128i_op0[0]) = 0x7fffffff7ffffffe; + *((unsigned long*)& __m128i_op1[1]) = 0x7fffffff7ffffffe; + *((unsigned long*)& __m128i_op1[0]) = 0x7fffffff7ffffffe; + *((unsigned long*)& __m128i_result[1]) = 0x3fffffff3ffffffe; + *((unsigned long*)& __m128i_result[0]) = 0x3fffffff3ffffffe; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x003f0000ffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x003f0000ffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x7fff0101ffffe000; + *((unsigned long*)& __m128i_op1[0]) = 0x7fffffffa0204000; + *((unsigned long*)& __m128i_result[1]) = 0x001f7fc100000000; + *((unsigned long*)& __m128i_result[0]) = 0x001f7fff00000000; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x000000ff00000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001000000010000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000cd630000cd63; + *((unsigned long*)& __m128i_op1[1]) = 0xcd636363cd636363; + *((unsigned long*)& __m128i_op1[0]) = 0xcd636363cd636363; + *((unsigned long*)& __m128i_result[1]) = 0xffffcd63ffffcd63; + *((unsigned long*)& __m128i_result[0]) = 0xffffd765ffffd765; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x8000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xff7fffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0040000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000015516a768038; + *((unsigned long*)& __m128i_op0[0]) = 0xffffff9ed2e1c000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x8000000080000000; + *((unsigned long*)& __m128i_op0[0]) = 0x007ffd0001400840; + *((unsigned long*)& __m128i_op1[1]) = 0x8000000080000000; + *((unsigned long*)& __m128i_op1[0]) = 0x007ffd0001400840; + *((unsigned long*)& __m128i_result[1]) = 0x3fffffff80000000; + *((unsigned long*)& __m128i_result[0]) = 0x00003ffd000a4000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0032000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0032000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x000009c400000000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0002000200020002; + *((unsigned long*)& __m128i_op0[0]) = 0x0202fe02fd020102; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x000000000202fe02; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0006000000040000; + *((unsigned long*)& __m128i_op0[0]) = 0x0002000000000007; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffff0000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x6363636363636363; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x000000006362ffff; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffff0000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffff0000ffff0000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op1[0]) = 0xffff0000ffff0000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[0]) = 0x00000000fffe0002; + __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c new file mode 100644 index 00000000000..e244293dbcc --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c @@ -0,0 +1,371 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000011; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000011; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000011; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000011; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000001; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000000c5ac01015b; + *((unsigned long*)& __m128i_op0[0]) = 0xaaacac88a3a9a96a; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000001300000013; + *((unsigned long*)& __m128i_op1[0]) = 0x0000001300000013; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000038003; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000040033; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000080000068; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000014; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7fffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x8000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x10f881a20ffd02b0; + *((unsigned long*)& __m128i_op0[0]) = 0x00000000ff800000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0ff780a10efc01af; + *((unsigned long*)& __m128i_result[0]) = 0x00000000fe7f0000; + __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x00000000efffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001001100110068; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x1d8000001d800000; + *((unsigned long*)& __m128i_op0[0]) = 0x1d8000001d800000; + *((unsigned long*)& __m128i_op1[1]) = 0x1d8000001d800000; + *((unsigned long*)& __m128i_op1[0]) = 0x1d8000001d800000; + *((unsigned long*)& __m128i_result[1]) = 0x0366000003660000; + *((unsigned long*)& __m128i_result[0]) = 0x0366000003660000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xbfd10d0d7b6b6b73; + *((unsigned long*)& __m128i_op1[0]) = 0xc5c534920000c4ed; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000800; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7ef400ad21fc7081; + *((unsigned long*)& __m128i_op0[0]) = 0x28bf0351ec69b5f2; + *((unsigned long*)& __m128i_op1[1]) = 0xffffb96bffff57c9; + *((unsigned long*)& __m128i_op1[0]) = 0xffff6080ffff4417; + *((unsigned long*)& __m128i_result[1]) = 0x7ef3ddac21fc5a2c; + *((unsigned long*)& __m128i_result[0]) = 0x28bee9edec690869; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + int_out = __lsx_vpickve2gr_h(__m128i_op0,0x0); + *((unsigned long*)& __m128i_op0[1]) = 0x0000200000002000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffe000ffdf; + *((unsigned long*)& __m128i_result[1]) = 0x00001fff00001fff; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000002; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000800000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000800000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000000000000214f; + *((unsigned long*)& __m128i_op0[0]) = 0xc31b63d846ebc810; + *((unsigned long*)& __m128i_op1[1]) = 0x00ff0000800000ff; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffff941d; + *((unsigned long*)& __m128i_result[1]) = 0x00000000000010a7; + *((unsigned long*)& __m128i_result[0]) = 0x0000000046ebaa2c; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00000000cf4f4f00; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000cf4f4f00; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000000000000007c; + *((unsigned long*)& __m128i_op0[0]) = 0x0000005f0003e000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000897957687; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000408; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x00000003397dd140; + *((unsigned long*)& __m128i_op0[0]) = 0x00000004bd7cdd20; + *((unsigned long*)& __m128i_op1[1]) = 0x0016ffb00016ffb0; + *((unsigned long*)& __m128i_op1[0]) = 0x0016ffb00016ffb0; + *((unsigned long*)& __m128i_result[1]) = 0x00000000004a294b; + *((unsigned long*)& __m128i_result[0]) = 0x00000000006d04bc; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xfffcfffcfffcfffc; + *((unsigned long*)& __m128i_op0[0]) = 0xfffcfffcfffcfffc; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x007ffe7ffe400000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x007ffd0001400840; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xfffcfffcfffcfffc; + *((unsigned long*)& __m128i_op1[0]) = 0xfffcfffcfffcfffc; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0xfffffffffffffffe; + *((unsigned long*)& __m128i_result[0]) = 0xfffffffffffffffe; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffa800000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000158; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000157; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0xfffffffffffffffe; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x001a64b345308091; + *((unsigned long*)& __m128i_op0[0]) = 0x001f2f2cab1c732a; + *((unsigned long*)& __m128i_op1[1]) = 0x1baf8eabd26bc629; + *((unsigned long*)& __m128i_op1[0]) = 0x1c2640b9a8e9fb49; + *((unsigned long*)& __m128i_result[1]) = 0x0002dab8746acf8e; + *((unsigned long*)& __m128i_result[0]) = 0x00036dd1c5c15856; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x3a8000003a800000; + *((unsigned long*)& __m128i_op0[0]) = 0x000ef0000000003b; + *((unsigned long*)& __m128i_op1[1]) = 0x0000ffff0000ffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000ffff0000ffff; + *((unsigned long*)& __m128i_result[1]) = 0x00003a7fc58074ff; + *((unsigned long*)& __m128i_result[0]) = 0x0000000eeff1100e; + __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c new file mode 100644 index 00000000000..6458963cb7f --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c @@ -0,0 +1,281 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x54feed87bc3f2be1; + *((unsigned long*)& __m128i_op0[0]) = 0x8064d8f6a494afcb; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x7fc000007fc00000; + *((unsigned long*)& __m128i_op1[0]) = 0x1e801ffc7fc00000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xfffffe003c1f0077; + *((unsigned long*)& __m128i_op0[0]) = 0xffffff0074230438; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000100000001; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000ff0000000438; + __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + unsigned_int_out = __lsx_vpickve2gr_bu(__m128i_op0,0x2); + *((unsigned long*)& __m128i_op0[1]) = 0x0000000100000001; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000800800000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000800800000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000100000001; + *((unsigned long*)& __m128i_result[0]) = 0x0000004000000000; + __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xfff5fff4002ffff5; + *((unsigned long*)& __m128i_op1[1]) = 0xaa858644fb8b3d49; + *((unsigned long*)& __m128i_op1[0]) = 0x18499e2cee2cc251; + *((unsigned long*)& __m128i_result[1]) = 0x8644000000000000; + *((unsigned long*)& __m128i_result[0]) = 0xaed495f03343a685; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7505443065413aed; + *((unsigned long*)& __m128i_op0[0]) = 0x0100d6effefd0498; + *((unsigned long*)& __m128i_op1[1]) = 0x7505443065413aed; + *((unsigned long*)& __m128i_op1[0]) = 0x0100d6effefd0498; + *((unsigned long*)& __m128i_result[1]) = 0xb71289fdfbea3f69; + *((unsigned long*)& __m128i_result[0]) = 0x4e17c2ffb4851a40; + __m128i_out = __lsx_vmul_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xfc01fcfefc02fdf7; + *((unsigned long*)& __m128i_op0[0]) = 0xfe00fcfffe01fd01; + *((unsigned long*)& __m128i_op1[1]) = 0xfc01fd1300000001; + *((unsigned long*)& __m128i_op1[0]) = 0xfe00fd1400010000; + *((unsigned long*)& __m128i_result[1]) = 0xc72ef153fc02fdf7; + *((unsigned long*)& __m128i_result[0]) = 0xca31bf15fd010000; + __m128i_out = __lsx_vmul_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000100000001; + *((unsigned long*)& __m128i_result[0]) = 0x0000000100000001; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xff00ff00ff00ff00; + *((unsigned long*)& __m128i_op0[0]) = 0xff00ff00ff00ff00; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xc000c000c000ff81; + *((unsigned long*)& __m128i_op1[1]) = 0x5d5d5d5d5d5d5d5d; + *((unsigned long*)& __m128i_op1[0]) = 0x5d5d5d5d5d5d0000; + *((unsigned long*)& __m128i_result[1]) = 0xa2a2a2a3a2a2a2a3; + *((unsigned long*)& __m128i_result[0]) = 0xc605c000aedd0000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xacc8c794af2caf01; + *((unsigned long*)& __m128i_op0[0]) = 0xa91e2048938c40f0; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xeeb1e4f43c3763f3; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffff5a6fe3d7; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000021e79364; + *((unsigned long*)& __m128i_op1[0]) = 0x0000718ea657431b; + *((unsigned long*)& __m128i_result[1]) = 0x000000006ca193ec; + *((unsigned long*)& __m128i_result[0]) = 0x00008e72b5b94cad; + __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x8000000080000000; + *((unsigned long*)& __m128i_op1[0]) = 0x8000000080000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffe000ffffe000; + *((unsigned long*)& __m128i_op1[0]) = 0x467f6080467d607f; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000040; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000040; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000040; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000040; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000001000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000001000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x007f008000ea007f; + *((unsigned long*)& __m128i_op0[0]) = 0x00ff00ff00ff00ff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xc000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0042003e0042002f; + *((unsigned long*)& __m128i_op0[0]) = 0x0001fffc0001fffc; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0xfffe0004fffe0004; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xc1bdceee242070db; + *((unsigned long*)& __m128i_op0[0]) = 0xe8c7b756d76aa478; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x3f433212dce09025; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xf359f359f359f359; + *((unsigned long*)& __m128i_op0[0]) = 0xf359f359f359f359; + *((unsigned long*)& __m128i_op1[1]) = 0xd3259a2984048c23; + *((unsigned long*)& __m128i_op1[0]) = 0xf9796558e39953fd; + *((unsigned long*)& __m128i_result[1]) = 0x86dd8341b164f12b; + *((unsigned long*)& __m128i_result[0]) = 0x9611c3985b3159f5; + __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x6363636363636363; + *((unsigned long*)& __m128i_op0[0]) = 0xffd27db010d20fbf; + *((unsigned long*)& __m128i_op1[1]) = 0x6363636363636363; + *((unsigned long*)& __m128i_op1[0]) = 0xffd27db010d20fbf; + *((unsigned long*)& __m128i_result[1]) = 0x9727b8499727b849; + *((unsigned long*)& __m128i_result[0]) = 0x12755900b653f081; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0303030303030303; + *((unsigned long*)& __m128i_op0[0]) = 0x0303030303030303; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x02f3030303030303; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x06d9090909090909; + __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffff81ffff7f03; + *((unsigned long*)& __m128i_op0[0]) = 0x04ffff8101ff81ff; + *((unsigned long*)& __m128i_op1[1]) = 0x0a0000000a000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0a0000000a000000; + *((unsigned long*)& __m128i_result[1]) = 0x0a0000001e000000; + *((unsigned long*)& __m128i_result[0]) = 0x0a000000f6000000; + __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x317fce80317fce80; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c new file mode 100644 index 00000000000..2043456d8bc --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c @@ -0,0 +1,433 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000158; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x001f7fc100000404; + *((unsigned long*)& __m128i_op0[0]) = 0x000000000002a000; + *((unsigned long*)& __m128i_op1[1]) = 0x7fff0101ffffe000; + *((unsigned long*)& __m128i_op1[0]) = 0x7fffffffa0204000; + *((unsigned long*)& __m128i_result[1]) = 0xffe1ffc100000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000400000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000009000900; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000009000900; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x30eb022002101b20; + *((unsigned long*)& __m128i_op0[0]) = 0x020310edc003023d; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000000000ff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x000000000000ffc3; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x6363636363636363; + *((unsigned long*)& __m128i_op1[0]) = 0x6363636363636363; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0xff9dff9dff9dff9d; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00000000efffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffe50000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000ff0000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffe020; + *((unsigned long*)& __m128i_op1[0]) = 0x3fc00000010a000b; + *((unsigned long*)& __m128i_result[1]) = 0x00001b0000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x00000000ff81007c; + *((unsigned long*)& __m128i_op0[0]) = 0xffb7005f0070007c; + *((unsigned long*)& __m128i_op1[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op1[0]) = 0x0001000104000800; + *((unsigned long*)& __m128i_result[1]) = 0x000000000000007c; + *((unsigned long*)& __m128i_result[0]) = 0x0000005f0003e000; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x4040404040404040; + *((unsigned long*)& __m128i_op1[0]) = 0x4040404040404040; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0xffffbfc0ffffbfc0; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x000000ffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x000000ffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0xffffff0100000001; + *((unsigned long*)& __m128i_result[0]) = 0xffffff0100000001; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000208000002080; + *((unsigned long*)& __m128i_op1[0]) = 0x0000208000002080; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000004; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000004870ba0; + *((unsigned long*)& __m128i_op1[1]) = 0x478b478b38031779; + *((unsigned long*)& __m128i_op1[0]) = 0x6b769e690fa1e119; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x00000000fe98c2a0; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000004000000040; + *((unsigned long*)& __m128i_op0[0]) = 0x00007770ffff9411; + *((unsigned long*)& __m128i_op1[1]) = 0x0000004000000040; + *((unsigned long*)& __m128i_op1[0]) = 0x00007770ffff9411; + *((unsigned long*)& __m128i_result[1]) = 0x0000100000001000; + *((unsigned long*)& __m128i_result[0]) = 0x37b951002d81a921; + __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x000000e0000000e0; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x000000e0000000e0; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x000000000000c400; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000001; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7fffffff7fffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x000000ffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0xffffffff80000001; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffb4ff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffb4ff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000016; + *((unsigned long*)& __m128i_result[1]) = 0xffffffffffffb4ff; + *((unsigned long*)& __m128i_result[0]) = 0xfffffffffff98dea; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0006000000040000; + *((unsigned long*)& __m128i_op0[0]) = 0x0002000000000007; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000f80007; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000006c80031; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000005; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001000101010001; + *((unsigned long*)& __m128i_op0[0]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000100000001; + *((unsigned long*)& __m128i_result[1]) = 0x0000000001010001; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000010001; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000202020200; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000100; + *((unsigned long*)& __m128i_op1[1]) = 0x0808080808080808; + *((unsigned long*)& __m128i_op1[0]) = 0x0004280808080808; + *((unsigned long*)& __m128i_result[1]) = 0x0010203030201000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000808080800; + __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x00000000b5207f80; + *((unsigned long*)& __m128i_op1[1]) = 0x2000000020000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000200200000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[0]) = 0x6a57a30ff0000000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xfffffffffffffff7; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_result[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[0]) = 0xfffffff700000009; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op0[0]) = 0x0001000104000800; + *((unsigned long*)& __m128i_op1[1]) = 0x8001000180010001; + *((unsigned long*)& __m128i_op1[0]) = 0x8001000184000800; + *((unsigned long*)& __m128i_result[1]) = 0xffff80007e028401; + *((unsigned long*)& __m128i_result[0]) = 0x9a10144000400000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000bd003d; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000fffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x0010000000000001; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000077af9450; + *((unsigned long*)& __m128i_op1[1]) = 0x000000400000004c; + *((unsigned long*)& __m128i_op1[0]) = 0x000047404f4f040d; + *((unsigned long*)& __m128i_result[1]) = 0x000000000000214f; + *((unsigned long*)& __m128i_result[0]) = 0xc31b63d846ebc810; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000002000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000002000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c new file mode 100644 index 00000000000..366a4ab2afe --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c @@ -0,0 +1,343 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_result[1]) = 0xfe01fe01fe01fe01; + *((unsigned long*)& __m128i_result[0]) = 0x00000000fe01fe01; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000200020; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x8000000080000000; + *((unsigned long*)& __m128i_op0[0]) = 0x8000000080000000; + *((unsigned long*)& __m128i_op1[1]) = 0x8000000080000000; + *((unsigned long*)& __m128i_op1[0]) = 0x8000000080000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x6a5d5b056f2f4978; + *((unsigned long*)& __m128i_op0[0]) = 0x17483c07141b5971; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xd4bade5e2e902836; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x345002920f3017d6; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000c0010000a186; + *((unsigned long*)& __m128i_op0[0]) = 0x00067fff0002a207; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffff0002; + *((unsigned long*)& __m128i_result[1]) = 0x000000ff0000857a; + *((unsigned long*)& __m128i_result[0]) = 0x05fafe0101fe000e; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op0[0]) = 0x0001000100000001; + *((unsigned long*)& __m128i_op1[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op1[0]) = 0xc1f03e1042208410; + *((unsigned long*)& __m128i_result[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_result[0]) = 0x00f0001000000010; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x00000000000eefff; + *((unsigned long*)& __m128i_op0[0]) = 0xf8e1a03affffe3e2; + *((unsigned long*)& __m128i_op1[1]) = 0x3a80613fda5dcb4a; + *((unsigned long*)& __m128i_op1[0]) = 0x93f0b81a914c003b; + *((unsigned long*)& __m128i_result[1]) = 0x00000000051649b6; + *((unsigned long*)& __m128i_result[0]) = 0xd2f005e44bb43416; + __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000001fc0000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7fffffff7fffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x7fffffff00000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000200000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0001fffe00000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00000001fffffffe; + *((unsigned long*)& __m128i_op1[0]) = 0x00000001fffffffe; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xfffff000f0008d3c; + *((unsigned long*)& __m128i_op0[0]) = 0xfffff0016fff8d3d; + *((unsigned long*)& __m128i_op1[1]) = 0xfffff000f0008d3c; + *((unsigned long*)& __m128i_op1[0]) = 0xfffff0016fff8d3d; + *((unsigned long*)& __m128i_result[1]) = 0xe10000004deb2610; + *((unsigned long*)& __m128i_result[0]) = 0xe101e0014dec4089; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x111110ff11111141; + *((unsigned long*)& __m128i_op1[0]) = 0x11111131111116a6; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x2028000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0001001100110068; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x67eb85afb2ebb000; + *((unsigned long*)& __m128i_op0[0]) = 0xc8847ef6ed3f2000; + *((unsigned long*)& __m128i_op1[1]) = 0xd400c02000002acf; + *((unsigned long*)& __m128i_op1[0]) = 0xf4000020c4000000; + *((unsigned long*)& __m128i_result[1]) = 0x6453f5e01d6e5000; + *((unsigned long*)& __m128i_result[0]) = 0x000fdec000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xbfd10d0d7b6b6b73; + *((unsigned long*)& __m128i_op1[0]) = 0xc5c534920000c4ed; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000001700000017; + *((unsigned long*)& __m128i_op0[0]) = 0x59f7fd8759f7fd87; + *((unsigned long*)& __m128i_op1[1]) = 0x0000001700000017; + *((unsigned long*)& __m128i_op1[0]) = 0x59f7fd8759f7fd87; + *((unsigned long*)& __m128i_result[1]) = 0x0000021100000211; + *((unsigned long*)& __m128i_result[0]) = 0xfb141d31fb141d31; + __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x7f800000976801fe; + *((unsigned long*)& __m128i_op1[0]) = 0x837c1ae57f8012ed; + *((unsigned long*)& __m128i_result[1]) = 0x976801fd6897fe02; + *((unsigned long*)& __m128i_result[0]) = 0x7f8012ec807fed13; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000008000000080; + *((unsigned long*)& __m128i_op0[0]) = 0x0080000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op1[0]) = 0x000100010001fffe; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000800080; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0002ffff00000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7ff8000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x7ff8000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0909090900000909; + *((unsigned long*)& __m128i_op1[0]) = 0x0909090909090909; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000100; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x3a80613fda5dcb4a; + *((unsigned long*)& __m128i_op0[0]) = 0x93f0b81a914c003b; + *((unsigned long*)& __m128i_op1[1]) = 0x0000feff23560000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000fd1654860000; + *((unsigned long*)& __m128i_result[1]) = 0x1e242e4d68dc0000; + *((unsigned long*)& __m128i_result[0]) = 0x2ff8fddb7ae20000; + __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000060000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000060000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7ff000ff6220c0c1; + *((unsigned long*)& __m128i_op0[0]) = 0xffe8081000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x000000007ff000ff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c new file mode 100644 index 00000000000..672e46753a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c @@ -0,0 +1,244 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000017fda829; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xfffffffffffffffc; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xfffffffffffffffc; + *((unsigned long*)& __m128i_result[1]) = 0xff01ff01ff01ff01; + *((unsigned long*)& __m128i_result[0]) = 0xff01ff01ff01fc10; + __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0042003e0042002f; + *((unsigned long*)& __m128i_op0[0]) = 0x0001fffc0001fffc; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0xffbeffc2ffbeffd1; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000003f80; + *((unsigned long*)& __m128i_op1[1]) = 0x0001000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0001000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000080; + *((unsigned long*)& __m128i_op0[0]) = 0x80000000fff80000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000080; + *((unsigned long*)& __m128i_op1[0]) = 0x80000000fff80000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000004000; + *((unsigned long*)& __m128i_result[0]) = 0xfff8004000000000; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffff8607db959f; + *((unsigned long*)& __m128i_op0[0]) = 0xff0cff78ff96ff14; + *((unsigned long*)& __m128i_op1[1]) = 0x0000008a0000008a; + *((unsigned long*)& __m128i_op1[0]) = 0x0000008900000009; + *((unsigned long*)& __m128i_result[1]) = 0x000000043c5ea7b6; + *((unsigned long*)& __m128i_result[0]) = 0x00000008fc4ef7b4; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffe; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffff46; + *((unsigned long*)& __m128i_result[1]) = 0xfffffffe00000002; + *((unsigned long*)& __m128i_result[0]) = 0xffffff46000000ba; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffc; + *((unsigned long*)& __m128i_op1[0]) = 0xfffffffffffffffc; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op0[0]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xf8f8372f752402ee; + *((unsigned long*)& __m128i_op1[1]) = 0x7fffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffc0000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000100000001; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000100000000; + *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffe; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x80044def00000001; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000ff000000ff00; + *((unsigned long*)& __m128i_result[1]) = 0x00007f8449a19084; + *((unsigned long*)& __m128i_result[0]) = 0x49a210000000ff00; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xfffcfd000000fb00; + *((unsigned long*)& __m128i_op0[0]) = 0x0001fe00f8000700; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x000000000000ffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[0]) = 0xfdfef9ff0efff900; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000005; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x7efefefe82010201; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000002; + *((unsigned long*)& __m128i_result[0]) = 0x7afafaf88a050a05; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xcda585aebbb2836a; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xcda585aebbb2836a; + *((unsigned long*)& __m128i_result[1]) = 0xd78cfd70b5f65d76; + *((unsigned long*)& __m128i_result[0]) = 0x5779108fdedda7e4; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x67eb85afb2ebb000; + *((unsigned long*)& __m128i_op0[0]) = 0xc8847ef6ed3f2000; + *((unsigned long*)& __m128i_op1[1]) = 0x67eb85afb2ebb000; + *((unsigned long*)& __m128i_op1[0]) = 0xc8847ef6ed3f2000; + *((unsigned long*)& __m128i_result[1]) = 0xd48acbfe13102acf; + *((unsigned long*)& __m128i_result[0]) = 0xf4af70d0c4000000; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffe0000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x3a8000003a800000; + *((unsigned long*)& __m128i_op0[0]) = 0x000ef0000000003b; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000056; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffff86; + *((unsigned long*)& __m128i_result[1]) = 0x00000000000eefff; + *((unsigned long*)& __m128i_result[0]) = 0xf8e1a03affffe3e2; + __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c new file mode 100644 index 00000000000..05a90881226 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c @@ -0,0 +1,271 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000006; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0100010000000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0100010000010000; + *((unsigned long*)& __m128i_result[1]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x000000003ddc5dac; + *((unsigned long*)& __m128i_op1[1]) = 0x67157b5100005000; + *((unsigned long*)& __m128i_op1[0]) = 0x387c7e0a133f2000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000004870ba0; + __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xfefe000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffff000000000155; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7fff7fff7fff7fff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0xffff8001ffff8001; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7ff0000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x7ff0000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x7ff0000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x7ff0000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x3ff0010000000000; + *((unsigned long*)& __m128i_result[0]) = 0x3ff0010000000000; + __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x00009c7c00007176; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00009c7c00007176; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x440ef000440ef000; + *((unsigned long*)& __m128i_op0[0]) = 0x4400000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x3a8000003a800000; + *((unsigned long*)& __m128i_op1[0]) = 0x000ef0000000003b; + *((unsigned long*)& __m128i_result[1]) = 0x0f8d33000f8d3300; + *((unsigned long*)& __m128i_result[0]) = 0x0003b80000000000; + __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0018001800180018; + *((unsigned long*)& __m128i_op0[0]) = 0x0018001800180018; + *((unsigned long*)& __m128i_op1[1]) = 0x85bd6b0e94d89998; + *((unsigned long*)& __m128i_op1[0]) = 0xd83c8081ffff808f; + *((unsigned long*)& __m128i_result[1]) = 0xfff489b693120950; + *((unsigned long*)& __m128i_result[0]) = 0xfffc45a851c40c18; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffe5; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffe5; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000001; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x3e1f321529232736; + *((unsigned long*)& __m128i_op1[0]) = 0x161d0c373c200826; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x3f8000003f800000; + *((unsigned long*)& __m128i_op0[0]) = 0x3f8000003f800000; + *((unsigned long*)& __m128i_op1[1]) = 0x0001000000010001; + *((unsigned long*)& __m128i_op1[0]) = 0x0001000000010001; + *((unsigned long*)& __m128i_result[1]) = 0x00003f8000000000; + *((unsigned long*)& __m128i_result[0]) = 0x00003f8000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x7fff000000007fff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000ffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000ffffffdfffdf; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000ffff0000ffff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00000000ffffe000; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000c6fde000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x000fef01000f27ca; + *((unsigned long*)& __m128i_op1[1]) = 0x0000010000010101; + *((unsigned long*)& __m128i_op1[0]) = 0x0101000001000100; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x00000ffef0010000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffffffe0; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000005452505; + *((unsigned long*)& __m128i_op1[0]) = 0x000000044525043c; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x3fc03fc000000004; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[0]) = 0xffffffffc03fc040; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000000000000000a; + *((unsigned long*)& __m128i_op0[0]) = 0x000000000000000a; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00fe000100cf005f; + *((unsigned long*)& __m128i_op1[0]) = 0x7fff7fff7fff7f00; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000400028000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000004; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xc110000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xc00d060000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x3ff0000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x40f3fa0000000000; + *((unsigned long*)& __m128i_result[1]) = 0xf047ef0000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00007fff7fff8000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffff100000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000000f0000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c new file mode 100644 index 00000000000..04c83332dde --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c @@ -0,0 +1,281 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x004e005500060031; + *((unsigned long*)& __m128i_op1[0]) = 0xff870068fff5ffb3; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000200010; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xfa31dfa21672e711; + *((unsigned long*)& __m128i_op0[0]) = 0x1304db85e468073a; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000150000; + *((unsigned long*)& __m128i_op0[0]) = 0xfffeffff001effff; + *((unsigned long*)& __m128i_op1[1]) = 0x00000000ffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000fffff1a0; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x000000000000f00f; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000080; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + unsigned_int_out = __lsx_vpickve2gr_hu(__m128i_op0,0x4); + *((unsigned long*)& __m128i_op0[1]) = 0xe2560afe9c001a18; + *((unsigned long*)& __m128i_op0[0]) = 0xe2560afe9c001a18; + *((unsigned long*)& __m128i_op1[1]) = 0x000000ff0000857a; + *((unsigned long*)& __m128i_op1[0]) = 0x05fafe0101fe000e; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000d82; + *((unsigned long*)& __m128i_result[0]) = 0x046a09ec009c0000; + __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xfe80ffffffffff02; + *((unsigned long*)& __m128i_op1[1]) = 0x7fff7fff7fff7fff; + *((unsigned long*)& __m128i_op1[0]) = 0x7fff7fff00000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x7f3f018000000000; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xf0fd800080000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000a00028004000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000005a00000228; + *((unsigned long*)& __m128i_op0[0]) = 0xfffff9ee000004ec; + *((unsigned long*)& __m128i_op1[1]) = 0xfffffacdb6dbecac; + *((unsigned long*)& __m128i_op1[0]) = 0x1f5533a694f902c0; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x1f54e0ab00000000; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00e4880080000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0080810080808100; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xff011fb11181d8ea; + *((unsigned long*)& __m128i_op0[0]) = 0x80ff800000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00fe00fe000200fe; + *((unsigned long*)& __m128i_op1[0]) = 0x00fe00fe000200fe; + *((unsigned long*)& __m128i_result[1]) = 0x00fd02fe00002302; + *((unsigned long*)& __m128i_result[0]) = 0x007ffd0200000000; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0xfffe0001fffe0001; + __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x14ccc6320076a4d2; + *((unsigned long*)& __m128i_op0[0]) = 0x685670d27e00682a; + *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffe; + *((unsigned long*)& __m128i_op1[0]) = 0xfffffffffffffffe; + *((unsigned long*)& __m128i_result[1]) = 0x14ccc631eb3339ce; + *((unsigned long*)& __m128i_result[0]) = 0x685670d197a98f2e; + __m128i_out = __lsx_vmulwod_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xf000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x003fffc0ffc0003f; + *((unsigned long*)& __m128i_op0[0]) = 0xffc0ffc0003f003f; + *((unsigned long*)& __m128i_op1[1]) = 0x000000400000004c; + *((unsigned long*)& __m128i_op1[0]) = 0x00007770ffff941d; + *((unsigned long*)& __m128i_result[1]) = 0x000000000ffff000; + *((unsigned long*)& __m128i_result[0]) = 0x000077529b522400; + __m128i_out = __lsx_vmulwod_d_wu(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000001000000010; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x1111113111111141; + *((unsigned long*)& __m128i_op1[0]) = 0x1111113111111121; + *((unsigned long*)& __m128i_result[1]) = 0x0000000111111312; + *((unsigned long*)& __m128i_result[0]) = 0x2222272111111410; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000001c88bf0; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000001c88bf0; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0xfffffff800000003; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffff0015172b; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffff00000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000800000; + *((unsigned long*)& __m128i_op0[0]) = 0x003fffffff800000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001; + *((unsigned long*)& __m128i_op0[0]) = 0x0001000600000001; + *((unsigned long*)& __m128i_op1[1]) = 0x00000000c6c6c6c6; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000c6c6c6c6; + *((unsigned long*)& __m128i_result[1]) = 0x000000000000c6c7; + *((unsigned long*)& __m128i_result[0]) = 0x8d8d8d8d8d8cc6c6; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0a0000000a000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0a0000000a000000; + *((unsigned long*)& __m128i_op1[1]) = 0x7f7f00007f7f7500; + *((unsigned long*)& __m128i_op1[0]) = 0x3b42017f3a7f7f01; + *((unsigned long*)& __m128i_result[1]) = 0x04faf60009f5f092; + *((unsigned long*)& __m128i_result[0]) = 0x04fafa9200000000; + __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c new file mode 100644 index 00000000000..58ebf2d2905 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c @@ -0,0 +1,307 @@ +/* { dg-do run } */ +/* { dg-options "-mlsx -w -fno-strict-aliasing" } */ +#include "../simd_correctness_check.h" +#include + +int main () +{ + __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result; + __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result; + __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result; + + int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail; + long int long_op0, long_op1, long_op2, lont_out, lont_result; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + *((unsigned long*)& __m128i_op0[1]) = 0xbf8000000000ffff; + *((unsigned long*)& __m128i_op0[0]) = 0xcf00000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000002; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000000000000ffff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000ff020000fff4; + *((unsigned long*)& __m128i_op1[1]) = 0x7fc000007fc00000; + *((unsigned long*)& __m128i_op1[0]) = 0x1e801ffc7fc00000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x00001ee100000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000010; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000010; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x000000007fff7fff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x3f5ec0a0feefa0b0; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x00000000ff02d060; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x80000000fff8fff8; + *((unsigned long*)& __m128i_op0[0]) = 0x80000000fff80000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000001000000010; + *((unsigned long*)& __m128i_op0[0]) = 0x0000001000000010; + *((unsigned long*)& __m128i_op1[1]) = 0x0010001000100010; + *((unsigned long*)& __m128i_op1[0]) = 0x0010001000100010; + *((unsigned long*)& __m128i_result[1]) = 0x0000000001000100; + *((unsigned long*)& __m128i_result[0]) = 0x0000000001000100; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x00000000004a294b; + *((unsigned long*)& __m128i_op0[0]) = 0x00000000006d04bc; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x55aa55aa55aa55ab; + *((unsigned long*)& __m128i_op0[0]) = 0xaa55555655aaaaa8; + *((unsigned long*)& __m128i_op1[1]) = 0x7ef4002d21fc7001; + *((unsigned long*)& __m128i_op1[0]) = 0x28bf02d1ec6a35b2; + *((unsigned long*)& __m128i_result[1]) = 0x2a7b7c9260f90ee2; + *((unsigned long*)& __m128i_result[0]) = 0x1b1c6cdfd57f5736; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x003fffff00000000; + *((unsigned long*)& __m128i_op0[0]) = 0x003fffff00000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000004040504; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000004040504; + *((unsigned long*)& __m128i_op1[1]) = 0x0000010100000101; + *((unsigned long*)& __m128i_op1[0]) = 0x0000010100000101; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x7fff00007fff0000; + *((unsigned long*)& __m128i_op0[0]) = 0x7fff00007fff0000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x000000ff000000ff; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000ffff00000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000ffff0000ffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000feff01; + *((unsigned long*)& __m128i_result[0]) = 0x00feff0100000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0101010202050120; + *((unsigned long*)& __m128i_op0[0]) = 0x0101010102020202; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000000000ff; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xf51cf8dad6040188; + *((unsigned long*)& __m128i_op0[0]) = 0x0982e2daf234ed87; + *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_result[0]) = 0x0ae3072529fbfe78; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x00000000000007f8; + *((unsigned long*)& __m128i_op1[0]) = 0x00000000000007f8; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x00ff000000ff0000; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000005; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff; + *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000; + *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + *((unsigned long*)& __m128i_op0[1]) = 0x030804010d090107; + *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000; + *((unsigned long*)& __m128i_op1[1]) = 0x1313131313131313; + *((unsigned long*)& __m128i_op1[0]) = 0x1313131313131313; + *((unsigned long*)& __m128i_result[1]) = 0x0039d21e3229d4e8; + *((unsigned long*)& __m128i_result[0]) = 0x6d339b4f3b439885; + __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1); + ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out); + + return 0; +}