[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 09/20] cputlb: Replace switches in load/store_helper with
From: |
David Hildenbrand |
Subject: |
Re: [PATCH v3 09/20] cputlb: Replace switches in load/store_helper with callback |
Date: |
Mon, 23 Sep 2019 11:54:15 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 |
On 23.09.19 11:51, Paolo Bonzini wrote:
> On 22/09/19 05:54, Richard Henderson wrote:
>> +/* Wrap the unaligned load helpers to that they have a common signature. */
>> +static inline uint64_t wrap_ldub(const void *haddr)
>> +{
>> + return ldub_p(haddr);
>> +}
>> +
>> +static inline uint64_t wrap_lduw_be(const void *haddr)
>> +{
>> + return lduw_be_p(haddr);
>> +}
>> +
>> +static inline uint64_t wrap_lduw_le(const void *haddr)
>> +{
>> + return lduw_le_p(haddr);
>> +}
>> +
>> +static inline uint64_t wrap_ldul_be(const void *haddr)
>> +{
>> + return (uint32_t)ldl_be_p(haddr);
>> +}
>> +
>> +static inline uint64_t wrap_ldul_le(const void *haddr)
>> +{
>> + return (uint32_t)ldl_le_p(haddr);
>> +}
>
> Any reason to have these five functions (plus five for stores) instead
> of a pair
>
> static uint64_t ld_memop(const void *haddr, MemOp op)
> {
> }
>
> static uint64_t st_memop(void *haddr, MemOp op, uint64_t val)
> {
> }
>
> that includes the switches? Everything should be inlined just the same
> if you do
>
> if (unlikely(tlb_addr & TLB_BSWAP)) {
> st_memop(haddr, op ^ MO_BSWAP, val);
> } else {
> st_memop(haddr, op, val);
> }
I asked the same question on v2 and Richard explained that - for
whatever reason - the compiler will not properly propagate the constant
in the "op ^ MO_BSWAP" case.
>
> and the like.
>
> Paolo
--
Thanks,
David / dhildenb
- [PATCH v3 08/20] cputlb: Disable __always_inline__ without optimization, (continued)
[PATCH v3 09/20] cputlb: Replace switches in load/store_helper with callback, Richard Henderson, 2019/09/21
[PATCH v3 11/20] exec: Adjust notdirty tracing, Richard Henderson, 2019/09/21
[PATCH v3 10/20] cputlb: Introduce TLB_BSWAP, Richard Henderson, 2019/09/21
[PATCH v3 12/20] cputlb: Move ROM handling from I/O path to TLB path, Richard Henderson, 2019/09/21
[PATCH v3 13/20] cputlb: Move NOTDIRTY handling from I/O path to TLB path, Richard Henderson, 2019/09/21