From: Jiajie Chen <c@jia.je>
To: gaosong <gaosong@loongson.cn>,
Richard Henderson <richard.henderson@linaro.org>,
qemu-devel@nongnu.org
Cc: git@xen0n.name, bibo mao <maobibo@loongson.cn>
Subject: Re: [PATCH 0/5] Add LoongArch v1.1 instructions
Date: Sat, 28 Oct 2023 21:09:15 +0800 [thread overview]
Message-ID: <ae3088b6-f472-4dd2-a5bc-9effb61ffaa0@jia.je> (raw)
In-Reply-To: <6482c6cf-1f4b-a7b9-d106-4c687360e810@loongson.cn>
On 2023/10/26 14:54, gaosong wrote:
> 在 2023/10/26 上午9:38, Jiajie Chen 写道:
>>
>> On 2023/10/26 03:04, Richard Henderson wrote:
>>> On 10/25/23 10:13, Jiajie Chen wrote:
>>>>> On 2023/10/24 07:26, Richard Henderson wrote:
>>>>>> See target/arm/tcg/translate-a64.c, gen_store_exclusive,
>>>>>> TCGv_i128 block.
>>>>>> See target/ppc/translate.c, gen_stqcx_.
>>>>>
>>>>> The situation here is slightly different: aarch64 and ppc64 have
>>>>> both 128-bit ll and sc, however LoongArch v1.1 only has 64-bit ll
>>>>> and 128-bit sc.
>>>
>>> Ah, that does complicate things.
>>>
>>>> Possibly use the combination of ll.d and ld.d:
>>>>
>>>>
>>>> ll.d lo, base, 0
>>>> ld.d hi, base, 4
>>>>
>>>> # do some computation
>>>>
>>>> sc.q lo, hi, base
>>>>
>>>> # try again if sc failed
>>>>
>>>> Then a possible implementation of gen_ll() would be: align base to
>>>> 128-bit boundary, read 128-bit from memory, save 64-bit part to rd
>>>> and record whole 128-bit data in llval. Then, in gen_sc_q(), it
>>>> uses a 128-bit cmpxchg.
>>>>
>>>>
>>>> But what about the reversed instruction pattern: ll.d hi, base, 4;
>>>> ld.d lo, base 0?
>>>
>>> It would be worth asking your hardware engineers about the bounds of
>>> legal behaviour. Ideally there would be some very explicit language,
>>> similar to
>>
>>
>> I'm a community developer not affiliated with Loongson. Song Gao,
>> could you provide some detail from Loongson Inc.?
>>
>>
>
> ll.d r1, base, 0
> dbar 0x700 ==> see 2.2.8.1
> ld.d r2, base, 8
> ...
> sc.q r1, r2, base
Thanks! I think we may need to detect the ll.d-dbar-ld.d sequence and
translate the sequence into one tcg_gen_qemu_ld_i128 and split the
result into two 64-bit parts. Can do this in QEMU?
>
>
> For this series,
> I think we need set the new config bits to the 'max cpu', and change
> linux-user/target_elf.h ''any' to 'max', so that we can use these new
> instructions on linux-user mode.
I will work on it.
>
> Thanks
> Song Gao
>>>
>>> https://developer.arm.com/documentation/ddi0487/latest/
>>> B2.9.5 Load-Exclusive and Store-Exclusive instruction usage
>>> restrictions
>>>
>>> But you could do the same thing, aligning and recording the entire
>>> 128-bit quantity, then extract the ll.d result based on address bit
>>> 6. This would complicate the implementation of sc.d as well, but
>>> would perhaps bring us "close enough" to the actual architecture.
>>>
>>> Note that our Arm store-exclusive implementation isn't quite in spec
>>> either. There is quite a large comment within translate-a64.c
>>> store_exclusive() about the ways things are not quite right. But it
>>> seems to be close enough for actual usage to succeed.
>>>
>>>
>>> r~
>
next prev parent reply other threads:[~2023-10-28 13:10 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-23 15:29 [PATCH 0/5] Add LoongArch v1.1 instructions Jiajie Chen
2023-10-23 15:29 ` [PATCH 1/5] include/exec/memop.h: Add MO_TESB Jiajie Chen
2023-10-23 15:49 ` David Hildenbrand
2023-10-23 15:52 ` Jiajie Chen
2023-10-23 15:29 ` [PATCH 2/5] target/loongarch: Add am{swap/add}[_db].{b/h} Jiajie Chen
2023-10-23 22:50 ` Richard Henderson
2023-10-23 15:29 ` [PATCH 3/5] target/loongarch: Add amcas[_db].{b/h/w/d} Jiajie Chen
2023-10-23 15:35 ` Jiajie Chen
2023-10-23 23:00 ` Richard Henderson
2023-10-23 22:59 ` Richard Henderson
2023-10-23 15:29 ` [PATCH 4/5] target/loongarch: Add estimated reciprocal instructions Jiajie Chen
2023-10-23 23:02 ` Richard Henderson
2023-10-23 15:29 ` [PATCH 5/5] target/loongarch: Add llacq/screl instructions Jiajie Chen
2023-10-23 23:19 ` Richard Henderson
2023-10-23 23:26 ` [PATCH 0/5] Add LoongArch v1.1 instructions Richard Henderson
2023-10-24 6:10 ` Jiajie Chen
2023-10-25 17:13 ` Jiajie Chen
2023-10-25 19:04 ` Richard Henderson
2023-10-26 1:38 ` Jiajie Chen
2023-10-26 6:54 ` gaosong
2023-10-28 13:09 ` Jiajie Chen [this message]
2023-10-30 8:23 ` gaosong
2023-10-30 11:54 ` Jiajie Chen
2023-10-31 9:11 ` gaosong
2023-10-31 9:13 ` Jiajie Chen
2023-10-31 11:06 ` gaosong
2023-10-31 11:10 ` Jiajie Chen
2023-10-31 12:12 ` gaosong
2025-11-10 3:42 ` gaosong
2025-11-10 16:00 ` Jiajie Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ae3088b6-f472-4dd2-a5bc-9effb61ffaa0@jia.je \
--to=c@jia.je \
--cc=gaosong@loongson.cn \
--cc=git@xen0n.name \
--cc=maobibo@loongson.cn \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).