On 10/1/2026 2:25 PM, Pierrick Bouvier wrote:
> On 10/1/2026 8:59 AM, Anton Johansson wrote:
>> Replaces uses of target_ulong with fixed-size integers, this is a
>> prerequisite step to compiling cpu.c once for system-mode.
>>
>> Note: the widening of target_long to int64_t in adjust_addr_body() is
>> safe as rv32 is ruled out earlier in the function via the check
>>
>> /* do nothing for rv32 mode */
>> if (riscv_cpu_mxl(env) == MXL_RV32) {
>> return addr;
>> }
>>
>> meaning target_long must be equal to int64_t anyway.
>>
>> Duplicate includes between vector_helper.c and vector_internals.h are
>> removed.
>>
>> Signed-off-by: Anton Johansson <[email protected]>
>> ---
>> target/riscv/internals.h | 31 +++++++++---------
>> target/riscv/tcg/vector_internals.h | 5 +--
>> target/riscv/tcg/vector_helper.c | 64
>> +++++++++++++++++--------------------
>> 3 files changed, 47 insertions(+), 53 deletions(-)
>>
>
> ...
>
>> /* Zjpm addr masking routine */
>> -static inline target_ulong adjust_addr_body(CPURISCVState *env,
>> - target_ulong addr,
>> - bool is_virt_addr)
>> +static inline uint64_t adjust_addr_body(CPURISCVState *env,
>> + uint64_t addr,
>> + bool is_virt_addr)
>> {
>> RISCVPmPmm pmm = PMM_FIELD_DISABLED;
>> uint32_t pmlen = 0;
>> @@ -239,7 +238,7 @@ static inline target_ulong
>> adjust_addr_body(CPURISCVState *env,
>>
>> /* sign/zero extend masked address by N-1 bit */
>> if (signext) {
>> - addr = (target_long)addr >> pmlen;
>> + addr = (int64_t)addr >> pmlen;
>> } else {
>> addr = addr >> pmlen;
>> }
>
> I think this one is incorrect, since for a 32-bit addr, value will not
> get sign extended, so shift will be unsigned.
>
> ```
> #include <stdio.h>
> #include <stdint.h>
> #include <inttypes.h>
>
> uint64_t out64(uint64_t in)
> {
> return (int64_t) in >> 1;
> }
>
> uint32_t out32(uint32_t in)
> {
> return (int32_t) in >> 1;
> }
>
> int main()
> {
> printf("32: %"PRIx32"\n", out32(0xffffffff));
> printf("64: %"PRIx64"\n", out64(0xffffffff));
> }
> ```
>
> Output is:
> 32: ffffffff
> 64: 7fffffff
>
> We need to add a:
> if (target_long_bits() == 32) {
> addr = (int32_t)addr >> pmlen;
> else {
> addr = (int64_t)addr >> pmlen;
> }
>
s/target_long_bits/riscv_cpu_mxl/
but you get the idea :)
> Regards,
> Pierrick