From nobody Tue Feb 10 11:56:05 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.51 as permitted sender) client-ip=209.85.221.51; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f51.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.51 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1629305010; cv=none; d=zohomail.com; s=zohoarc; b=jEs9RBD2ca9DYAsu92ljEeMtaAz9Xyvx9W1dQK8YHJq1AqjVZloyIAilTGGwaSRM/RBtpRiwRmSIM8OwubJyy9c2i/RB86LlxMnbQMvTeRvMw29xfGdqk0Dnk9WNmvsVetbsWl5i9W73b0dXqKgUlACRo0EfuDXTvySDJW6mMK8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629305010; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ibaxaWoB80RThVUaBh+iN68HbOGwmZxSh4QYtisHkss=; b=EnDvkYmWu2nJmNLANCCExmQw2etG6N4EignqxOTCpUs4hymnt9b4MuZziPOLEKa4+BazDlluFMY1KDfK96MdtyV6NQ7tbf4vDb1GAWlKT8dQJkgXh6IwzbdRn0lLL8+fuzoBwECUdCoD6PxUN79sGq5NlAW8SA+DQ+CCI/xWkXk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.51 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mx.zohomail.com with SMTPS id 1629305010154253.74114162203523; Wed, 18 Aug 2021 09:43:30 -0700 (PDT) Received: by mail-wr1-f51.google.com with SMTP id l11so4524517wrx.4 for ; Wed, 18 Aug 2021 09:43:29 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.redhat.com (163.red-83-52-55.dynamicip.rima-tde.net. [83.52.55.163]) by smtp.gmail.com with ESMTPSA id y11sm384786wru.0.2021.08.18.09.43.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Aug 2021 09:43:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ibaxaWoB80RThVUaBh+iN68HbOGwmZxSh4QYtisHkss=; b=czmGEBe5T7BU0jYD3N84dQtfQbnrF4Nyio6chgwJ3Wv1T66tey+FZmwWwIJqZ4m9cb Cwtx2WleKANsEagaeWnPj4T9cm/JNReG0wJ35TaNRw3TFCe9hKWBDDl87ZYwGgNCDj2/ XW1XUcl8aUeBcQuXj1uGrT1NABjAo+1vAyKkc8YlmLvX//02nZMGH27blCRtefykbdHN fUtWrS7VydJlvNEfKJ0cz57uIjcLO7hhsS6UZKXcFsaX22aGJ7/5+unB55SvEeJjZxQV 5znjVtIe2CFF0VCkqXkDfWHc08UQ4SQ1qw2GQfqBCKr0xosXZ1l0KjTQXQar5sMPb1kX kdLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ibaxaWoB80RThVUaBh+iN68HbOGwmZxSh4QYtisHkss=; b=mQj1V5LgbS6ku3gDmqYKqjb+MvJH+/zuHZYUwcGfbC4ZXjrb1F1m0Mj2eMsrqF0qkf mRGpNJMLzYJ4Jlo3hP6CZlOSnOuBfvDruw9/uohRxJLwi9ggoZI49RKAa1AIk3YnZiok bYLH6HUSFCmIOW6nGpVfCqDLNcvuLSoUWZoIOS2m9qjnSw1hgfFjSjRstayVmAX3pQ17 teUGpS93anz31GWa5QuGRYyoLP8M+yxudlX8BzH/Lc8qxz5UYsg5b6tOx4dpkwh5cLzL xhbQZ94rmz5zXeMen+KjfKiBcMFc0m6jcXOg14pt9XjkZb3dwgOYeNaMKYm/bpfmoSk5 tTiA== X-Gm-Message-State: AOAM531IvCEHVGvBrJwrmuSfA8l62OZu/lfhmFZp4X6FezimM0+5KQg5 qZjifUyeBK+ntShIwEhSkMI= X-Google-Smtp-Source: ABdhPJzvohUYzXt+uSKGUHToGuLwdcMG2JPREh4lwWA2NWh6IjEBW3B/3ozNkI6kb9TQcRfso6PQkw== X-Received: by 2002:adf:f285:: with SMTP id k5mr11745547wro.117.1629305008385; Wed, 18 Aug 2021 09:43:28 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Jiaxun Yang , Thomas Huth , Aurelien Jarno , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Richard Henderson , Aleksandar Rikalo Subject: [PATCH 1/5] target/mips: Replace GET_OFFSET() macro by get_offset() function Date: Wed, 18 Aug 2021 18:43:17 +0200 Message-Id: <20210818164321.2474534-2-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210818164321.2474534-1-f4bug@amsat.org> References: <20210818164321.2474534-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1629305011044100001 The target endianess information is stored in the BigEndian bit of the Config0 register in CP0. As a first step, replace the GET_OFFSET() macro by an inlined get_offset() function, passing CPUMIPSState as argument. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- target/mips/tcg/ldst_helper.c | 57 +++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/target/mips/tcg/ldst_helper.c b/target/mips/tcg/ldst_helper.c index d42812b8a6a..97e7ad7d7a4 100644 --- a/target/mips/tcg/ldst_helper.c +++ b/target/mips/tcg/ldst_helper.c @@ -52,31 +52,44 @@ HELPER_LD_ATOMIC(lld, ldq, 0x7, (target_ulong)) =20 #endif /* !CONFIG_USER_ONLY */ =20 +static inline bool cpu_is_bigendian(CPUMIPSState *env) +{ + return extract32(env->CP0_Config0, CP0C0_BE, 1); +} + #ifdef TARGET_WORDS_BIGENDIAN #define GET_LMASK(v) ((v) & 3) -#define GET_OFFSET(addr, offset) (addr + (offset)) #else #define GET_LMASK(v) (((v) & 3) ^ 3) -#define GET_OFFSET(addr, offset) (addr - (offset)) #endif =20 +static inline target_ulong get_offset(CPUMIPSState *env, + target_ulong addr, int offset) +{ + if (cpu_is_bigendian(env)) { + return addr + offset; + } else { + return addr - offset; + } +} + void helper_swl(CPUMIPSState *env, target_ulong arg1, target_ulong arg2, int mem_idx) { cpu_stb_mmuidx_ra(env, arg2, (uint8_t)(arg1 >> 24), mem_idx, GETPC()); =20 if (GET_LMASK(arg2) <=3D 2) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 1), (uint8_t)(arg1 >> 16), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 1), (uint8_t)(arg1 >>= 16), mem_idx, GETPC()); } =20 if (GET_LMASK(arg2) <=3D 1) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 2), (uint8_t)(arg1 >> 8), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 2), (uint8_t)(arg1 >>= 8), mem_idx, GETPC()); } =20 if (GET_LMASK(arg2) =3D=3D 0) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 3), (uint8_t)arg1, + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 3), (uint8_t)arg1, mem_idx, GETPC()); } } @@ -87,17 +100,17 @@ void helper_swr(CPUMIPSState *env, target_ulong arg1, = target_ulong arg2, cpu_stb_mmuidx_ra(env, arg2, (uint8_t)arg1, mem_idx, GETPC()); =20 if (GET_LMASK(arg2) >=3D 1) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -1), (uint8_t)(arg1 >> 8), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -1), (uint8_t)(arg1 >= > 8), mem_idx, GETPC()); } =20 if (GET_LMASK(arg2) >=3D 2) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -2), (uint8_t)(arg1 >> 16), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -2), (uint8_t)(arg1 >= > 16), mem_idx, GETPC()); } =20 if (GET_LMASK(arg2) =3D=3D 3) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -3), (uint8_t)(arg1 >> 24), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -3), (uint8_t)(arg1 >= > 24), mem_idx, GETPC()); } } @@ -119,37 +132,37 @@ void helper_sdl(CPUMIPSState *env, target_ulong arg1,= target_ulong arg2, cpu_stb_mmuidx_ra(env, arg2, (uint8_t)(arg1 >> 56), mem_idx, GETPC()); =20 if (GET_LMASK64(arg2) <=3D 6) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 1), (uint8_t)(arg1 >> 48), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 1), (uint8_t)(arg1 >>= 48), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) <=3D 5) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 2), (uint8_t)(arg1 >> 40), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 2), (uint8_t)(arg1 >>= 40), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) <=3D 4) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 3), (uint8_t)(arg1 >> 32), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 3), (uint8_t)(arg1 >>= 32), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) <=3D 3) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 4), (uint8_t)(arg1 >> 24), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 4), (uint8_t)(arg1 >>= 24), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) <=3D 2) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 5), (uint8_t)(arg1 >> 16), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 5), (uint8_t)(arg1 >>= 16), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) <=3D 1) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 6), (uint8_t)(arg1 >> 8), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 6), (uint8_t)(arg1 >>= 8), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) <=3D 0) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, 7), (uint8_t)arg1, + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, 7), (uint8_t)arg1, mem_idx, GETPC()); } } @@ -160,37 +173,37 @@ void helper_sdr(CPUMIPSState *env, target_ulong arg1,= target_ulong arg2, cpu_stb_mmuidx_ra(env, arg2, (uint8_t)arg1, mem_idx, GETPC()); =20 if (GET_LMASK64(arg2) >=3D 1) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -1), (uint8_t)(arg1 >> 8), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -1), (uint8_t)(arg1 >= > 8), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) >=3D 2) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -2), (uint8_t)(arg1 >> 16), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -2), (uint8_t)(arg1 >= > 16), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) >=3D 3) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -3), (uint8_t)(arg1 >> 24), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -3), (uint8_t)(arg1 >= > 24), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) >=3D 4) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -4), (uint8_t)(arg1 >> 32), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -4), (uint8_t)(arg1 >= > 32), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) >=3D 5) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -5), (uint8_t)(arg1 >> 40), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -5), (uint8_t)(arg1 >= > 40), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) >=3D 6) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -6), (uint8_t)(arg1 >> 48), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -6), (uint8_t)(arg1 >= > 48), mem_idx, GETPC()); } =20 if (GET_LMASK64(arg2) =3D=3D 7) { - cpu_stb_mmuidx_ra(env, GET_OFFSET(arg2, -7), (uint8_t)(arg1 >> 56), + cpu_stb_mmuidx_ra(env, get_offset(env, arg2, -7), (uint8_t)(arg1 >= > 56), mem_idx, GETPC()); } } --=20 2.31.1