rust/library
Matthias Krüger 4b2d87d82c
Rollup merge of #114721 - danflapjax:bool-ord-optimization, r=cuviper
Optimizing the rest of bool's Ord implementation

After coming across issue #66780, I realized that the other functions provided by Ord (`min`, `max`, and `clamp`) were similarly inefficient for bool. This change provides implementations for them in terms of boolean operators, resulting in much simpler assembly and faster code.
Fixes issue #114653

[Comparison on Godbolt](https://rust.godbolt.org/z/5nb5P8e8j)

`max` assembly before:
```assembly
example::max:
        mov     eax, edi
        mov     ecx, eax
        neg     cl
        mov     edx, esi
        not     dl
        cmp     dl, cl
        cmove   eax, esi
        ret
```
`max` assembly after:
```assembly
example::max:
        mov     eax, edi
        or      eax, esi
        ret
```
`clamp` assembly before:
```assembly
example:🗜️
        mov     eax, esi
        sub     al, dl
        inc     al
        cmp     al, 2
        jae     .LBB1_1
        mov     eax, edi
        sub     al, sil
        movzx   ecx, dil
        sub     dil, dl
        cmp     dil, 1
        movzx   edx, dl
        cmovne  edx, ecx
        cmp     al, -1
        movzx   eax, sil
        cmovne  eax, edx
        ret
.LBB1_1:
        ; identical assert! code
```
`clamp` assembly after:
```assembly
example:🗜️
        test    edx, edx
        jne     .LBB1_2
        test    sil, sil
        jne     .LBB1_3
.LBB1_2:
        or      dil, sil
        and     dil, dl
        mov     eax, edi
        ret
.LBB1_3:
        ; identical assert! code
```
2023-08-16 08:43:49 +02:00
..
alloc Auto merge of #112387 - clarfonthey:non-panicking-ceil-char-boundary, r=m-ou-se 2023-08-15 13:49:24 +00:00
backtrace@e1c49fbd61 Update std to backtrace 0.3.68 2023-07-02 17:02:45 -07:00
core Rollup merge of #114721 - danflapjax:bool-ord-optimization, r=cuviper 2023-08-16 08:43:49 +02:00
panic_abort Add internal_features lint 2023-08-03 14:50:50 +02:00
panic_unwind stabilize abi_thiscall 2023-08-07 14:11:03 +02:00
portable-simd remove repetitive words 2023-07-31 16:13:02 +08:00
proc_macro Stabilize thread local cell methods. 2023-08-10 17:33:40 +02:00
profiler_builtins Rollup merge of #114069 - cuviper:profiler-path, r=Mark-Simulacrum 2023-08-13 21:00:45 +02:00
rtstartup Remove custom frame info registration on i686-pc-windows-gnu 2022-08-23 16:12:58 +08:00
rustc-std-workspace-alloc Replace libstd, libcore, liballoc in line comments. 2022-12-30 14:00:42 +01:00
rustc-std-workspace-core Switch all libraries to the 2021 edition 2021-12-23 19:03:47 +08:00
rustc-std-workspace-std Switch all libraries to the 2021 edition 2021-12-23 19:03:47 +08:00
std Auto merge of #114689 - m-ou-se:stabilize-thread-local-cell-methods, r=thomcc 2023-08-16 02:37:29 +00:00
stdarch@d77878b729 Bump stdarch 2023-06-13 21:45:04 -07:00
sysroot Expose compiler-builtins-weak-intrinsics feature for -Zbuild-std 2023-06-23 11:15:34 +01:00
test Rollup merge of #114377 - Enselic:test_get_dbpath_for_term-utf-8, r=thomcc 2023-08-09 22:59:58 +02:00
unwind add a csky-unknown-linux-gnuabiv2 target 2023-08-14 23:02:36 +08:00