On Wed, 20 May 2026 15:00:47 GMT, Andrew Dinn <[email protected]> wrote:

>> src/hotspot/cpu/aarch64/register_aarch64.hpp line 546:
>> 
>>> 544: template<int N>
>>> 545: VSeq<N-1> vs_tail(const VSeq<N>& v) {
>>> 546:   static_assert(N > 1, "tail sequence length must be greater than 2");
>> 
>> Which one is it, `N > 1`, or `greater than 2`?
>
> Full disclosure -- this is my copypasta introduced during an earlier round of 
> reviewing.
> 
> Given that we have a static assert that `N > 2` in the definition of class 
> `VSeq` I guess this is redundant. Likewise, the assertion in `vs_head`.
> 
> It doesn't really make any sense to /declare/ a `VSeq` with less than 2 
> elements as the purpose of the class is to provide a way to manage and access 
> more than one FloatRegister using indexed notation (`vs[i]`). However, the 
> provision of `vs_tail` gives rise to the possibility that we might create a 
> `VSeq<1>` from a `VSeq<2>` so we could consider adjusting the asserts 
> accordingly.
> 
> In fact, `vs_head` and `vs_tail` were added to deal with the need for the 
> current proposed kernel to operate on groups of 5 registers at a time.  The 
> code uses `vs_head` to access the first register in the group and `vs_tail` 
> to access a sequence over the remaining four registers (n.b. calling 
> `vs_head(vs)` is not strictly needed -- you can just use `vs[0]`  -- so maybe 
> we don't need to provide it).
> 
> So, for current requirements, we could just delete the assert here and in 
> `vs_head` and rely on the one in the definition of `VSeq`. If we ever need to 
> split off the tail of a `VSeq<2>` we could reconsider this.
> 
> Likewise we could drop `vs_head`. I thought it would be good to provide it 
> because it emphasise the way that the sequence is being recursively split in 
> two and ... well ... Lisp!

Dropped the assert for now.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/30941#discussion_r3288555091

Reply via email to