bors 0d410be23c Auto merge of #115515 - the8472:zip-for-arrays, r=scottmcm
optimize zipping over array iterators

Fixes #115339 (somewhat)

the new assembly:

```asm
zip_arrays:
        .cfi_startproc
        vmovups (%rdx), %ymm0
        leaq    32(%rsi), %rcx
        vxorps  %xmm1, %xmm1, %xmm1
        vmovups %xmm1, -24(%rsp)
        movq    $0, -8(%rsp)
        movq    %rsi, -88(%rsp)
        movq    %rdi, %rax
        movq    %rcx, -80(%rsp)
        vmovups %ymm0, -72(%rsp)
        movq    $0, -40(%rsp)
        movq    $32, -32(%rsp)
        movq    -24(%rsp), %rcx
        vmovups (%rsi,%rcx), %ymm0
        vorps   -72(%rsp,%rcx), %ymm0, %ymm0
        vmovups %ymm0, (%rsi,%rcx)
        vmovups (%rsi), %ymm0
        vmovups %ymm0, (%rdi)
        vzeroupper
        retq
```

This is still longer than the slice version given in the issue but at least it eliminates the terrible  `vpextrb`/`orb` chain. I guess this is due to excessive memcpys again (haven't looked at the llvmir)?

The `TrustedLen` specialization is a drive-by change since I had to do something for the default impl anyway to be able to specialize the `TrustedRandomAccessNoCoerce` impl.
2023-10-15 00:49:21 +00:00
..
2023-04-16 11:38:52 +00:00
2023-06-14 15:21:15 -04:00
2022-10-08 11:48:53 +00:00
2022-07-13 17:07:41 -07:00
2023-08-13 13:07:53 -06:00
2023-10-02 08:35:08 +02:00
2023-04-26 02:10:22 -04:00
2023-04-16 11:38:52 +00:00
2023-04-16 11:38:52 +00:00
2023-04-16 11:38:52 +00:00
2023-04-16 11:38:52 +00:00
2023-05-30 08:00:10 -04:00
2023-04-16 11:38:52 +00:00
2023-04-16 11:38:52 +00:00
2023-08-13 13:07:53 -06:00
2023-07-03 14:05:55 +02:00
2023-09-23 14:23:51 -03:00
2023-07-12 21:38:55 -04:00
2023-05-30 08:00:10 -04:00
2023-04-16 11:38:52 +00:00
2022-09-27 19:23:52 +00:00
2022-08-20 12:49:20 -04:00
2022-12-30 14:00:42 +01:00
2023-01-02 10:33:23 -08:00
2022-07-08 21:18:15 +00:00
2022-06-27 13:30:44 -04:00