Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- EBC encryption: 5.833 GB/s
- EBC encryption blocked: 802.582 MB/s
- EBC decryption: 5.74 GB/s
- EBC decryption blocked: 802.291 MB/s
- public void EncryptEcb(Span<byte> data)
- {
- Vector128<byte>[] keys = RoundKeys;
- Span<Vector128<byte>> blocks = MemoryMarshal.Cast<byte, Vector128<byte>>(data);
- // Makes the JIT remove all the other range checks on keys
- Vector128<byte> key10 = keys[10];
- for (int i = 0; i < blocks.Length; i++)
- {
- Vector128<byte> b = blocks[i];
- b = Sse2.Xor(b, keys[0]);
- b = Aes.Encrypt(b, keys[1]);
- b = Aes.Encrypt(b, keys[2]);
- b = Aes.Encrypt(b, keys[3]);
- b = Aes.Encrypt(b, keys[4]);
- b = Aes.Encrypt(b, keys[5]);
- b = Aes.Encrypt(b, keys[6]);
- b = Aes.Encrypt(b, keys[7]);
- b = Aes.Encrypt(b, keys[8]);
- b = Aes.Encrypt(b, keys[9]);
- b = Aes.EncryptLast(b, keys[10]);
- blocks[i] = b;
- }
- }
- ; Assembly listing for method AesContext:EncryptEcb(struct):this
- ; Emitting BLENDED_CODE for X64 CPU with AVX - Windows
- ; optimized code
- ; rsp based frame
- ; fully interruptible
- ; Final local variable assignments
- ;
- ; V00 this [V00,T06] ( 3, 3 ) ref -> rcx this class-hnd
- ; V01 arg1 [V01,T04] ( 4, 8 ) byref -> rdx
- ; V02 loc0 [V02,T01] ( 13, 46 ) ref -> rax class-hnd
- ;* V03 loc1 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op
- ; V04 loc2 [V04,T02] ( 5, 17 ) int -> r8
- ; V05 loc3 [V05,T00] ( 24, 96 ) simd16 -> mm0
- ; V06 OutArgs [V06 ] ( 1, 1 ) lclBlk (32) [rsp+0x00] "OutgoingArgSpace"
- ;* V07 tmp1 [V07,T16] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
- ;* V08 tmp2 [V08,T17] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
- ;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg"
- ; V10 tmp4 [V10,T11] ( 2, 2 ) int -> rdx "Inline stloc first use temp"
- ;* V11 tmp5 [V11 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
- ; V12 tmp6 [V12,T12] ( 2, 2 ) int -> rdx "Inline stloc first use temp"
- ;* V13 tmp7 [V13 ] ( 0, 0 ) struct (16) zero-ref "NewObj constructor temp"
- ;* V14 tmp8 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
- ;* V15 tmp9 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "NewObj constructor temp"
- ;* V16 tmp10 [V16 ] ( 0, 0 ) byref -> zero-ref V25._pointer(offs=0x00) P-INDEP "field V01._pointer (fldOffset=0x0)"
- ;* V17 tmp11 [V17 ] ( 0, 0 ) int -> zero-ref V25._length(offs=0x08) P-INDEP "field V01._length (fldOffset=0x8)"
- ; V18 tmp12 [V18,T07] ( 2, 5 ) byref -> rcx V03._pointer(offs=0x00) P-INDEP "field V03._pointer (fldOffset=0x0)"
- ; V19 tmp13 [V19,T05] ( 3, 6 ) int -> rdx V03._length(offs=0x08) P-INDEP "field V03._length (fldOffset=0x8)"
- ; V20 tmp14 [V20,T08] ( 2, 2 ) byref -> rcx V09._pointer(offs=0x00) P-INDEP "field V09._pointer (fldOffset=0x0)"
- ; V21 tmp15 [V21,T13] ( 2, 2 ) int -> rdx V09._length(offs=0x08) P-INDEP "field V09._length (fldOffset=0x8)"
- ; V22 tmp16 [V22,T09] ( 2, 2 ) byref -> rcx V13._pointer(offs=0x00) P-INDEP "field V13._pointer (fldOffset=0x0)"
- ; V23 tmp17 [V23,T14] ( 2, 2 ) int -> rdx V13._length(offs=0x08) P-INDEP "field V13._length (fldOffset=0x8)"
- ; V24 tmp18 [V24,T10] ( 2, 2 ) byref -> rcx V15._value(offs=0x00) P-INDEP "field V15._value (fldOffset=0x0)"
- ;* V25 tmp19 [V25 ] ( 0, 0 ) struct (16) zero-ref "Promoted implicit byref"
- ; V26 cse0 [V26,T03] ( 3, 12 ) byref -> r9 "ValNumCSE"
- ;* V27 cse1 [V27 ] ( 0, 0 ) long -> zero-ref "ValNumCSE"
- ; V28 cse2 [V28,T15] ( 2, 2 ) int -> r8 "ValNumCSE"
- ;
- ; Lcl frame size = 40
- G_M18342_IG02:
- mov rax, gword ptr [rcx+8]
- mov rcx, bword ptr [rdx]
- mov edx, dword ptr [rdx+8]
- shr edx, 4
- mov r8d, dword ptr [rax+8]
- cmp r8d, 10
- jbe G_M18342_IG06
- xor r8d, r8d
- test edx, edx
- jle SHORT G_M18342_IG04
- G_M18342_IG03:
- movsxd r9, r8d
- shl r9, 4
- add r9, rcx
- vmovupd xmm0, xmmword ptr [r9]
- vpxor xmm0, xmm0, xmmword ptr [rax+16]
- vaesenc xmm0, xmm0, xmmword ptr [rax+32]
- vaesenc xmm0, xmm0, xmmword ptr [rax+48]
- vaesenc xmm0, xmm0, xmmword ptr [rax+64]
- vaesenc xmm0, xmm0, xmmword ptr [rax+80]
- vaesenc xmm0, xmm0, xmmword ptr [rax+96]
- vaesenc xmm0, xmm0, xmmword ptr [rax+112]
- vaesenc xmm0, xmm0, xmmword ptr [rax+128]
- vaesenc xmm0, xmm0, xmmword ptr [rax+144]
- vaesenc xmm0, xmm0, xmmword ptr [rax+160]
- vaesenclast xmm0, xmm0, xmmword ptr [rax+176]
- vmovupd xmmword ptr [r9], xmm0
- inc r8d
- cmp r8d, edx
- jl SHORT G_M18342_IG03
- G_M18342_IG04:
- add rsp, 40
- ret
- G_M18342_IG05:
- call CORINFO_HELP_OVERFLOW
- int3
- ; Total bytes of code 163, prolog size 7 for method AesContext:EncryptEcb(struct):this
- ; ============================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement