topperc wrote:

> I read through the patch again cleanly, and I don't have any problems with 
> the PR at this point. The only thing I would note is that in 
> `GetClangTargetABI` we're constructing a string which indicates which ISA 
> extensions are enabled (that are relevant here) to return a string like 
> `lp64f`, which is then used in `SetupTargetOpts` to add the feature flags 
> that should be enabled for clang. We are doing the exact same thing in 
> `DisassemblerLLVMC::DisassemblerLLVMC`,
> 
> ```
>   if (triple.isRISCV()) {
>     uint32_t arch_flags = arch.GetFlags();
>     if (arch_flags & ArchSpec::eRISCV_rvc)
>       features_str += "+c,";
>     if (arch_flags & ArchSpec::eRISCV_rve)
>       features_str += "+e,";
>     if ((arch_flags & ArchSpec::eRISCV_float_abi_single) ==
>         ArchSpec::eRISCV_float_abi_single)
>       features_str += "+f,";
>     if ((arch_flags & ArchSpec::eRISCV_float_abi_double) ==
>         ArchSpec::eRISCV_float_abi_double)
>       features_str += "+f,+d,";
> ```
> 
> etc. It's a small bit of duplication, but I expect these will be at risk of 
> diverging if done separately. I wonder if our ArchSpec should have a method 
> to get the clang feature flags.

That code doesn't look right. Shouldn't it be using eRISCV_float_abi_mask. It's 
treat each single and double as bit positions, but they are really encodings in 
2-bit field.

```
     if ((arch_flags & ArchSpec::eRISCV_float_abi_mask) ==
         ArchSpec::eRISCV_float_abi_single)
       features_str += "+f,";
     if ((arch_flags & ArchSpec::eRISCV_float_abi_mask) ==
         ArchSpec::eRISCV_float_abi_double)
       features_str += "+f,+d,";
```

https://github.com/llvm/llvm-project/pull/99336
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to