From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 09C68C433EF for ; Mon, 20 Sep 2021 17:21:13 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C0EE361409 for ; Mon, 20 Sep 2021 17:21:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C0EE361409 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xen0n.name Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:46906 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mSMyd-0007Up-SV for qemu-devel@archiver.kernel.org; Mon, 20 Sep 2021 13:21:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48596) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mSMta-0002ts-5b for qemu-devel@nongnu.org; Mon, 20 Sep 2021 13:16:04 -0400 Received: from [115.28.160.31] (port=40746 helo=mailbox.box.xen0n.name) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mSMtW-00050h-Cp for qemu-devel@nongnu.org; Mon, 20 Sep 2021 13:15:57 -0400 Received: from [192.168.9.172] (unknown [101.88.25.142]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by mailbox.box.xen0n.name (Postfix) with ESMTPSA id C6CBA600FF; Tue, 21 Sep 2021 01:15:45 +0800 (CST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=xen0n.name; s=mail; t=1632158145; bh=tvZaDMYi4B5JS3X5c1B+b0lyHOclM2A0WkGkCgjnCDI=; h=Date:Subject:To:References:From:In-Reply-To:From; b=XSzuHPblzq9RoAWQIla2k4avXYid2IWQxwevwc2oOxkD0KCTeCoAPBCdo9NdbJu1D MVcUXo5TRIgRQ29nzqIa/S/J4lrMoe1TmD2p6LwgYwnOYlXdnZ/BOz6YpJWrKuD1HV 8kbbUShEF69axlLOLNXtd1cnq686F3irF6HXIpJU= Message-ID: <0dca41a7-7293-a7b2-0153-d181b659b785@xen0n.name> Date: Tue, 21 Sep 2021 01:15:45 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:94.0) Gecko/20100101 Thunderbird/94.0a1 Subject: Re: [PATCH 07/30] tcg/loongarch: Implement necessary relocation operations Content-Language: en-US To: Richard Henderson , qemu-devel@nongnu.org References: <20210920080451.408655-1-git@xen0n.name> <20210920080451.408655-8-git@xen0n.name> <00e99b7d-7769-bba3-355c-34cef320da1e@linaro.org> From: WANG Xuerui In-Reply-To: <00e99b7d-7769-bba3-355c-34cef320da1e@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 115.28.160.31 (failed) Received-SPF: pass client-ip=115.28.160.31; envelope-from=i.qemu@xen0n.name; helo=mailbox.box.xen0n.name X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Hi Richard, On 9/20/21 22:36, Richard Henderson wrote: > On 9/20/21 1:04 AM, WANG Xuerui wrote: >> +static bool reloc_call(tcg_insn_unit *src_rw, const tcg_insn_unit >> *target) >> +{ >> +    const tcg_insn_unit *src_rx = tcg_splitwx_to_rx(src_rw); >> +    intptr_t offset = (intptr_t)target - (intptr_t)src_rx; >> +    int32_t lo = sextreg(offset, 0, 12); >> +    int32_t hi = offset - lo; >> + >> +    tcg_debug_assert((offset & 2) == 0); >> +    if (offset == hi + lo) { >> +        hi >>= 12; >> +        src_rw[0] |= (hi << 5) & 0x1ffffe0; /* pcaddu12i's Sj20 imm */ >> +        lo >>= 2; >> +        src_rw[1] |= (lo << 10) & 0x3fffc00; /* jirl's Sk16 imm */ >> +        return true; >> +    } >> + >> +    return false; >> +} > > This doesn't seem to belong as a "reloc". > Certainly it doesn't seem like something that can simply be allowed to > fail. > Yes, you're right on this; on closer look at the riscv port they actually reused this logic once (the riscv port drops large constants to pool, hence need some PC-relative hackery). For LoongArch the only usage of this code is for generating calls, so I'll just merge this into the commit doing tcg_out_call, and inline if the resulting code is still readable. And it's 1 a.m. here in China, so I'll be processing the other review comments after getting some sleep. (Today's in the middle of the 3-day Mid-Autumn Festival holiday here, and that's why I can work on this hobby project like it's $DAY_JOB!) I'll send the v2 hopefully at afternoon local time (tomorrow in your timezone). > > r~