Commit f62984c
Add AVX512 BMM API (#124804)
This PR implements the [AVX512 BMM
API](#123898).
```csharp
namespace System.Runtime.Intrinsics.X86
{
public abstract class Avx512Bmm : Avx512F
{
public static new bool IsSupported { get; }
public static Vector128<byte> ReverseBits(Vector128<byte> values);
public static Vector256<byte> ReverseBits(Vector256<byte> values);
public static Vector512<byte> ReverseBits(Vector512<byte> values);
public static Vector256<ushort> BitMultiplyMatrix16x16WithOrReduction(Vector256<ushort> addend, Vector256<ushort> left, Vector256<ushort> right);
public static Vector512<ushort> BitMultiplyMatrix16x16WithOrReduction(Vector512<ushort> addend, Vector512<ushort> left, Vector512<ushort> right);
public static Vector256<ushort> BitMultiplyMatrix16x16WithXorReduction(Vector256<ushort> addend, Vector256<ushort> left, Vector256<ushort> right);
public static Vector512<ushort> BitMultiplyMatrix16x16WithXorReduction(Vector512<ushort> addend, Vector512<ushort> left, Vector512<ushort> right);
}
}
```
## Disasm Samples
<details>
<summary>BitMultiplyMatrix16x16WithOrReduction</summary>
```csharp
private static Vector256<ushort> BitMultiplyMatrix16x16WithOrReduction_Vector256(Vector256<ushort> x, Vector256<ushort> y, Vector256<ushort> z)
{
return Avx512Bmm.BitMultiplyMatrix16x16WithOrReduction(x, y, z);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:BitMultiplyMatrix16x16WithOrReduction_Vector256(System.Runtime.Intrinsics.Vector256`1[ushort],System.Runtime.Intrinsics.Vector256`1[ushort],System.Runtime.Intrinsics.Vector256`1[ushort]):System.Runtime.Intrinsics.Vector256`1[ushort] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups ymm0, ymmword ptr [rdx]
vmovups ymm1, ymmword ptr [r8]
vbmacor16x16x16 ymm0, ymm1, ymmword ptr [r9]
vmovups ymmword ptr [rcx], ymm0
mov rax, rcx
G_M000_IG03: ;; offset=0x0016
vzeroupper
ret
; Total bytes of code 26
```
```csharp
private static Vector512<ushort> BitMultiplyMatrix16x16WithOrReduction_Vector512(Vector512<ushort> x, Vector512<ushort> y, Vector512<ushort> z)
{
return Avx512Bmm.BitMultiplyMatrix16x16WithOrReduction(x, y, z);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:BitMultiplyMatrix16x16WithOrReduction_Vector512(System.Runtime.Intrinsics.Vector512`1[ushort],System.Runtime.Intrinsics.Vector512`1[ushort],System.Runtime.Intrinsics.Vector512`1[ushort]):System.Runtime.Intrinsics.Vector512`1[ushort] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups zmm0, zmmword ptr [rdx]
vmovups zmm1, zmmword ptr [r8]
vbmacor16x16x16 zmm0, zmm1, zmmword ptr [r9]
vmovups zmmword ptr [rcx], zmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x001B
vzeroupper
ret
; Total bytes of code 31
```
</details>
<details>
<summary>BitMultiplyMatrix16x16WithXorReduction</summary>
```csharp
private static Vector256<ushort> BitMultiplyMatrix16x16WithXorReduction_Vector256(Vector256<ushort> x, Vector256<ushort> y, Vector256<ushort> z)
{
return Avx512Bmm.BitMultiplyMatrix16x16WithXorReduction(x, y, z);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:BitMultiplyMatrix16x16WithXorReduction_Vector256(System.Runtime.Intrinsics.Vector256`1[ushort],System.Runtime.Intrinsics.Vector256`1[ushort],System.Runtime.Intrinsics.Vector256`1[ushort]):System.Runtime.Intrinsics.Vector256`1[ushort] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups ymm0, ymmword ptr [rdx]
vmovups ymm1, ymmword ptr [r8]
vbmacxor16x16x16 ymm0, ymm1, ymmword ptr [r9]
vmovups ymmword ptr [rcx], ymm0
mov rax, rcx
G_M000_IG03: ;; offset=0x0016
vzeroupper
ret
; Total bytes of code 26
```
```csharp
private static Vector512<ushort> BitMultiplyMatrix16x16WithXorReduction_Vector512(Vector512<ushort> x, Vector512<ushort> y, Vector512<ushort> z)
{
return Avx512Bmm.BitMultiplyMatrix16x16WithXorReduction(x, y, z);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:BitMultiplyMatrix16x16WithXorReduction_Vector512(System.Runtime.Intrinsics.Vector512`1[ushort],System.Runtime.Intrinsics.Vector512`1[ushort],System.Runtime.Intrinsics.Vector512`1[ushort]):System.Runtime.Intrinsics.Vector512`1[ushort] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups zmm0, zmmword ptr [rdx]
vmovups zmm1, zmmword ptr [r8]
vbmacxor16x16x16 zmm0, zmm1, zmmword ptr [r9]
vmovups zmmword ptr [rcx], zmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x001B
vzeroupper
ret
; Total bytes of code 31
```
</details>
<details>
<summary>ReverseBits</summary>
```csharp
private static Vector128<byte> ReverseBits_Vector128(Vector128<byte> values)
{
return Avx512Bmm.ReverseBits(values);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Vector128(System.Runtime.Intrinsics.Vector128`1[byte]):System.Runtime.Intrinsics.Vector128`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vbitrev xmm0, xmmword ptr [rdx]
vmovups xmmword ptr [rcx], xmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x000D
ret
; Total bytes of code 14
```
```csharp
private static Vector256<byte> ReverseBits_Vector256(Vector256<byte> values)
{
return Avx512Bmm.ReverseBits(values);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Vector256(System.Runtime.Intrinsics.Vector256`1[byte]):System.Runtime.Intrinsics.Vector256`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vbitrev ymm0, ymmword ptr [rdx]
vmovups ymmword ptr [rcx], ymm0
mov rax, rcx
G_M000_IG03: ;; offset=0x000D
vzeroupper
ret
; Total bytes of code 17
```
```csharp
private static Vector512<byte> ReverseBits_Vector512(Vector512<byte> values)
{
return Avx512Bmm.ReverseBits(values);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Vector512(System.Runtime.Intrinsics.Vector512`1[byte]):System.Runtime.Intrinsics.Vector512`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vbitrev zmm0, zmmword ptr [rdx]
vmovups zmmword ptr [rcx], zmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x000F
vzeroupper
ret
; Total bytes of code 19
```
</details>
<details>
<summary>ReverseBits (Merge Masking)</summary>
```csharp
private static Vector128<byte> ReverseBits_Mask_Vector128(Vector128<byte> values, Vector128<byte> mask)
{
return Avx512BW.BlendVariable(values, Avx512Bmm.ReverseBits(values), mask);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Mask_Vector128(System.Runtime.Intrinsics.Vector128`1[byte],System.Runtime.Intrinsics.Vector128`1[byte]):System.Runtime.Intrinsics.Vector128`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups xmm0, xmmword ptr [rdx]
vmovups xmm1, xmmword ptr [r8]
vpmovb2m k1, xmm1
vbitrev xmm0 {k1}, xmm0
vmovups xmmword ptr [rcx], xmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x001C
ret
; Total bytes of code 29
```
```csharp
private static Vector256<byte> ReverseBits_Mask_Vector256(Vector256<byte> values, Vector256<byte> mask)
{
return Avx512BW.BlendVariable(values, Avx512Bmm.ReverseBits(values), mask);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Mask_Vector256(System.Runtime.Intrinsics.Vector256`1[byte],System.Runtime.Intrinsics.Vector256`1[byte]):System.Runtime.Intrinsics.Vector256`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups ymm0, ymmword ptr [rdx]
vmovups ymm1, ymmword ptr [r8]
vpmovb2m k1, ymm1
vbitrev ymm0 {k1}, ymm0
vmovups ymmword ptr [rcx], ymm0
mov rax, rcx
G_M000_IG03: ;; offset=0x001C
vzeroupper
ret
; Total bytes of code 32
```
```csharp
private static Vector512<byte> ReverseBits_Mask_Vector512(Vector512<byte> values, Vector512<byte> mask)
{
return Avx512BW.BlendVariable(values, Avx512Bmm.ReverseBits(values), mask);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Mask_Vector512(System.Runtime.Intrinsics.Vector512`1[byte],System.Runtime.Intrinsics.Vector512`1[byte]):System.Runtime.Intrinsics.Vector512`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups zmm0, zmmword ptr [rdx]
vmovups zmm1, zmmword ptr [r8]
vpmovb2m k1, zmm1
vbitrev zmm0 {k1}, zmm0
vmovups zmmword ptr [rcx], zmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x0021
vzeroupper
ret
; Total bytes of code 37
```
</details>
<details>
<summary>ReverseBits (Zero Masking)</summary>
```csharp
private static Vector128<byte> ReverseBits_Maskz_Vector128(Vector128<byte> values, Vector128<byte> mask)
{
return Avx512BW.BlendVariable(Vector128<byte>.Zero, Avx512Bmm.ReverseBits(values), mask);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Maskz_Vector128(System.Runtime.Intrinsics.Vector128`1[byte],System.Runtime.Intrinsics.Vector128`1[byte]):System.Runtime.Intrinsics.Vector128`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups xmm0, xmmword ptr [r8]
vpmovb2m k1, xmm0
vbitrev xmm0 {k1}{z}, xmmword ptr [rdx]
vmovups xmmword ptr [rcx], xmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x0018
ret
; Total bytes of code 25
```
```csharp
private static Vector256<byte> ReverseBits_Maskz_Vector256(Vector256<byte> values, Vector256<byte> mask)
{
return Avx512BW.BlendVariable(Vector256<byte>.Zero, Avx512Bmm.ReverseBits(values), mask);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Maskz_Vector256(System.Runtime.Intrinsics.Vector256`1[byte],System.Runtime.Intrinsics.Vector256`1[byte]):System.Runtime.Intrinsics.Vector256`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups ymm0, ymmword ptr [r8]
vpmovb2m k1, ymm0
vbitrev ymm0 {k1}{z}, ymmword ptr [rdx]
vmovups ymmword ptr [rcx], ymm0
mov rax, rcx
G_M000_IG03: ;; offset=0x0018
vzeroupper
ret
; Total bytes of code 28
```
```csharp
private static Vector512<byte> ReverseBits_Maskz_Vector512(Vector512<byte> values, Vector512<byte> mask)
{
return Avx512BW.BlendVariable(Vector512<byte>.Zero, Avx512Bmm.ReverseBits(values), mask);
}
```
```
; Assembly listing for method JIT.HardwareIntrinsics.X86._Avx512Bmm.Program:ReverseBits_Maskz_Vector512(System.Runtime.Intrinsics.Vector512`1[byte],System.Runtime.Intrinsics.Vector512`1[byte]):System.Runtime.Intrinsics.Vector512`1[byte] (FullOpts)
; Emitting BLENDED_CODE for generic X64 + VEX + EVEX on Windows
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
G_M000_IG01: ;; offset=0x0000
G_M000_IG02: ;; offset=0x0000
vmovups zmm0, zmmword ptr [r8]
vpmovb2m k1, zmm0
vbitrev zmm0 {k1}{z}, zmmword ptr [rdx]
vmovups zmmword ptr [rcx], zmm0
mov rax, rcx
G_M000_IG03: ;; offset=0x001B
vzeroupper
ret
; Total bytes of code 31
```
</details>
---------
Co-authored-by: Alex Covington (Advanced Micro Devices Inc) <b-alexco@microsoft.com>1 parent 4172d0e commit f62984c
29 files changed
Lines changed: 764 additions & 128 deletions
File tree
- src
- coreclr
- inc
- jit
- tools/Common
- Internal/Runtime
- JitInterface
- ThunkGenerator
- vm
- libraries
- System.Private.CoreLib/src
- System/Runtime/Intrinsics/X86
- System.Runtime.Intrinsics/ref
- native/minipal
- tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Bmm
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
678 | 678 | | |
679 | 679 | | |
680 | 680 | | |
| 681 | + | |
681 | 682 | | |
682 | 683 | | |
683 | 684 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
100 | 101 | | |
101 | 102 | | |
102 | 103 | | |
| |||
114 | 115 | | |
115 | 116 | | |
116 | 117 | | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
147 | 149 | | |
148 | 150 | | |
149 | 151 | | |
| |||
719 | 721 | | |
720 | 722 | | |
721 | 723 | | |
| 724 | + | |
| 725 | + | |
722 | 726 | | |
723 | 727 | | |
724 | 728 | | |
| |||
787 | 791 | | |
788 | 792 | | |
789 | 793 | | |
| 794 | + | |
| 795 | + | |
790 | 796 | | |
791 | 797 | | |
792 | 798 | | |
| |||
911 | 917 | | |
912 | 918 | | |
913 | 919 | | |
| 920 | + | |
914 | 921 | | |
915 | 922 | | |
916 | 923 | | |
| |||
980 | 987 | | |
981 | 988 | | |
982 | 989 | | |
| 990 | + | |
983 | 991 | | |
984 | 992 | | |
985 | 993 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
| 95 | + | |
95 | 96 | | |
96 | 97 | | |
97 | 98 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
| 131 | + | |
131 | 132 | | |
132 | 133 | | |
133 | 134 | | |
| |||
3104 | 3105 | | |
3105 | 3106 | | |
3106 | 3107 | | |
3107 | | - | |
3108 | | - | |
| 3108 | + | |
| 3109 | + | |
| 3110 | + | |
3109 | 3111 | | |
3110 | 3112 | | |
3111 | 3113 | | |
| |||
3164 | 3166 | | |
3165 | 3167 | | |
3166 | 3168 | | |
| 3169 | + | |
| 3170 | + | |
| 3171 | + | |
| 3172 | + | |
| 3173 | + | |
| 3174 | + | |
| 3175 | + | |
3167 | 3176 | | |
3168 | 3177 | | |
3169 | 3178 | | |
3170 | | - | |
3171 | 3179 | | |
3172 | 3180 | | |
3173 | 3181 | | |
| |||
21377 | 21385 | | |
21378 | 21386 | | |
21379 | 21387 | | |
| 21388 | + | |
| 21389 | + | |
| 21390 | + | |
| 21391 | + | |
| 21392 | + | |
| 21393 | + | |
| 21394 | + | |
| 21395 | + | |
| 21396 | + | |
21380 | 21397 | | |
21381 | 21398 | | |
21382 | 21399 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
956 | 956 | | |
957 | 957 | | |
958 | 958 | | |
| 959 | + | |
959 | 960 | | |
960 | 961 | | |
961 | 962 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
902 | 902 | | |
903 | 903 | | |
904 | 904 | | |
| 905 | + | |
| 906 | + | |
905 | 907 | | |
906 | 908 | | |
907 | 909 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1092 | 1092 | | |
1093 | 1093 | | |
1094 | 1094 | | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
1095 | 1101 | | |
1096 | 1102 | | |
1097 | 1103 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
215 | 215 | | |
216 | 216 | | |
217 | 217 | | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
218 | 222 | | |
219 | 223 | | |
220 | 224 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
651 | 651 | | |
652 | 652 | | |
653 | 653 | | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
654 | 662 | | |
655 | 663 | | |
656 | 664 | | |
| |||
1131 | 1139 | | |
1132 | 1140 | | |
1133 | 1141 | | |
| 1142 | + | |
1134 | 1143 | | |
1135 | 1144 | | |
1136 | 1145 | | |
| |||
0 commit comments