Skip to content

Commit 356b9ff

Browse files
committed
software AES support
1 parent 6052179 commit 356b9ff

21 files changed

Lines changed: 501 additions & 159 deletions

src/asm/program_epilogue_linux.inc

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
;# restore callee-saved registers - System V AMD64 ABI
2-
pop r15
3-
pop r14
4-
pop r13
5-
pop r12
6-
pop rbp
7-
pop rbx
2+
mov r15, qword ptr [rsp+280]
3+
mov r14, qword ptr [rsp+272]
4+
mov r13, qword ptr [rsp+264]
5+
mov r12, qword ptr [rsp+256]
6+
mov rbp, qword ptr [rsp+232]
7+
mov rbx, qword ptr [rsp+224]
8+
9+
add rsp, 456
810

911
;# program finished
10-
ret 0
12+
ret

src/asm/program_epilogue_store.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
;# save VM register values
2-
pop rcx
2+
mov rcx, qword ptr [rsp+448]
33
mov qword ptr [rcx+0], r8
44
mov qword ptr [rcx+8], r9
55
mov qword ptr [rcx+16], r10

src/asm/program_epilogue_win64.inc

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
;# restore callee-saved registers - Microsoft x64 calling convention
2-
movdqu xmm15, xmmword ptr [rsp]
3-
movdqu xmm14, xmmword ptr [rsp+16]
4-
movdqu xmm13, xmmword ptr [rsp+32]
5-
movdqu xmm12, xmmword ptr [rsp+48]
6-
movdqu xmm11, xmmword ptr [rsp+64]
7-
add rsp, 80
8-
movdqu xmm10, xmmword ptr [rsp]
9-
movdqu xmm9, xmmword ptr [rsp+16]
10-
movdqu xmm8, xmmword ptr [rsp+32]
11-
movdqu xmm7, xmmword ptr [rsp+48]
12-
movdqu xmm6, xmmword ptr [rsp+64]
13-
add rsp, 80
14-
pop r15
15-
pop r14
16-
pop r13
17-
pop r12
18-
pop rsi
19-
pop rdi
20-
pop rbp
21-
pop rbx
2+
movdqa xmm15, xmmword ptr [rsp+432]
3+
movdqa xmm14, xmmword ptr [rsp+416]
4+
movdqa xmm13, xmmword ptr [rsp+400]
5+
movdqa xmm12, xmmword ptr [rsp+384]
6+
movdqa xmm11, xmmword ptr [rsp+368]
7+
movdqa xmm10, xmmword ptr [rsp+352]
8+
movdqa xmm9, xmmword ptr [rsp+336]
9+
movdqa xmm8, xmmword ptr [rsp+320]
10+
movdqa xmm7, xmmword ptr [rsp+304]
11+
movdqa xmm6, xmmword ptr [rsp+288]
12+
mov r15, qword ptr [rsp+280]
13+
mov r14, qword ptr [rsp+272]
14+
mov r13, qword ptr [rsp+264]
15+
mov r12, qword ptr [rsp+256]
16+
mov rdi, qword ptr [rsp+248]
17+
mov rsi, qword ptr [rsp+240]
18+
mov rbp, qword ptr [rsp+232]
19+
mov rbx, qword ptr [rsp+224]
20+
21+
add rsp, 456
2222

2323
;# program finished
2424
ret

src/asm/program_loop_load.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
lea rcx, [rsi+rax]
2-
push rcx
2+
mov qword ptr [rsp+8], rcx
33
xor r8, qword ptr [rcx+0]
44
xor r9, qword ptr [rcx+8]
55
xor r10, qword ptr [rcx+16]
@@ -9,7 +9,7 @@
99
xor r14, qword ptr [rcx+48]
1010
xor r15, qword ptr [rcx+56]
1111
lea rcx, [rsi+rdx]
12-
push rcx
12+
mov qword ptr [rsp+16], rcx
1313
cvtdq2pd xmm0, qword ptr [rcx+0]
1414
cvtdq2pd xmm1, qword ptr [rcx+8]
1515
cvtdq2pd xmm2, qword ptr [rcx+16]

src/asm/program_loop_store.inc

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pop rcx
1+
mov rcx, qword ptr [rsp+16]
22
mov qword ptr [rcx+0], r8
33
mov qword ptr [rcx+8], r9
44
mov qword ptr [rcx+16], r10
@@ -7,23 +7,11 @@
77
mov qword ptr [rcx+40], r13
88
mov qword ptr [rcx+48], r14
99
mov qword ptr [rcx+56], r15
10-
pop rcx
11-
aesenc xmm0, xmm4
12-
aesdec xmm1, xmm4
13-
aesenc xmm2, xmm4
14-
aesdec xmm3, xmm4
15-
aesenc xmm0, xmm5
16-
aesdec xmm1, xmm5
17-
aesenc xmm2, xmm5
18-
aesdec xmm3, xmm5
19-
aesenc xmm0, xmm6
20-
aesdec xmm1, xmm6
21-
aesenc xmm2, xmm6
22-
aesdec xmm3, xmm6
23-
aesenc xmm0, xmm7
24-
aesdec xmm1, xmm7
25-
aesenc xmm2, xmm7
26-
aesdec xmm3, xmm7
10+
mov rcx, qword ptr [rsp+8]
11+
xorpd xmm0, xmm4
12+
xorpd xmm1, xmm5
13+
xorpd xmm2, xmm6
14+
xorpd xmm3, xmm7
2715
movapd xmmword ptr [rcx+0], xmm0
2816
movapd xmmword ptr [rcx+16], xmm1
2917
movapd xmmword ptr [rcx+32], xmm2
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
mov rcx, qword ptr [rsp+16]
2+
mov qword ptr [rcx+0], r8
3+
mov qword ptr [rcx+8], r9
4+
mov qword ptr [rcx+16], r10
5+
mov qword ptr [rcx+24], r11
6+
mov qword ptr [rcx+32], r12
7+
mov qword ptr [rcx+40], r13
8+
mov qword ptr [rcx+48], r14
9+
mov qword ptr [rcx+56], r15
10+
mov rcx, qword ptr [rsp+8]
11+
aesenc xmm0, xmm4
12+
aesdec xmm1, xmm4
13+
aesenc xmm2, xmm4
14+
aesdec xmm3, xmm4
15+
aesenc xmm0, xmm5
16+
aesdec xmm1, xmm5
17+
aesenc xmm2, xmm5
18+
aesdec xmm3, xmm5
19+
aesenc xmm0, xmm6
20+
aesdec xmm1, xmm6
21+
aesenc xmm2, xmm6
22+
aesdec xmm3, xmm6
23+
aesenc xmm0, xmm7
24+
aesdec xmm1, xmm7
25+
aesenc xmm2, xmm7
26+
aesdec xmm3, xmm7
27+
movapd xmmword ptr [rcx+0], xmm0
28+
movapd xmmword ptr [rcx+16], xmm1
29+
movapd xmmword ptr [rcx+32], xmm2
30+
movapd xmmword ptr [rcx+48], xmm3
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
mov rcx, qword ptr [rsp+16]
2+
mov qword ptr [rcx+0], r8
3+
mov qword ptr [rcx+8], r9
4+
mov qword ptr [rcx+16], r10
5+
mov qword ptr [rcx+24], r11
6+
mov qword ptr [rcx+32], r12
7+
mov qword ptr [rcx+40], r13
8+
mov qword ptr [rcx+48], r14
9+
mov qword ptr [rcx+56], r15
10+
mov rcx, qword ptr [rsp+8]
11+
12+
movapd xmmword ptr [rsp+96], xmm0
13+
movapd xmmword ptr [rsp+112], xmm1
14+
movapd xmmword ptr [rsp+128], xmm2
15+
movapd xmmword ptr [rsp+144], xmm3
16+
movapd xmmword ptr [rsp+160], xmm4
17+
movapd xmmword ptr [rsp+176], xmm5
18+
movapd xmmword ptr [rsp+192], xmm6
19+
movapd xmmword ptr [rsp+208], xmm7
20+
21+
mov qword ptr [rsp+24], rax
22+
mov qword ptr [rsp+40], rcx
23+
mov qword ptr [rsp+48], rdx
24+
mov qword ptr [rsp+56], rbp
25+
mov qword ptr [rsp+72], rsi
26+
mov qword ptr [rsp+80], rdi
27+
mov qword ptr [rsp+88], rbx
28+
29+
lea rsi, [rsp+160]
30+
lea rdi, [rsp+96]
31+
call soft_aes_enc
32+
lea rsi, [rsp+160]
33+
lea rdi, [rsp+112]
34+
call soft_aes_dec
35+
lea rsi, [rsp+160]
36+
lea rdi, [rsp+128]
37+
call soft_aes_enc
38+
lea rsi, [rsp+160]
39+
lea rdi, [rsp+144]
40+
call soft_aes_dec
41+
42+
lea rsi, [rsp+176]
43+
lea rdi, [rsp+96]
44+
call soft_aes_enc
45+
lea rsi, [rsp+176]
46+
lea rdi, [rsp+112]
47+
call soft_aes_dec
48+
lea rsi, [rsp+176]
49+
lea rdi, [rsp+128]
50+
call soft_aes_enc
51+
lea rsi, [rsp+176]
52+
lea rdi, [rsp+144]
53+
call soft_aes_dec
54+
55+
lea rsi, [rsp+192]
56+
lea rdi, [rsp+96]
57+
call soft_aes_enc
58+
lea rsi, [rsp+192]
59+
lea rdi, [rsp+112]
60+
call soft_aes_dec
61+
lea rsi, [rsp+192]
62+
lea rdi, [rsp+128]
63+
call soft_aes_enc
64+
lea rsi, [rsp+192]
65+
lea rdi, [rsp+144]
66+
call soft_aes_dec
67+
68+
lea rsi, [rsp+208]
69+
lea rdi, [rsp+96]
70+
call soft_aes_enc
71+
lea rsi, [rsp+208]
72+
lea rdi, [rsp+112]
73+
call soft_aes_dec
74+
lea rsi, [rsp+208]
75+
lea rdi, [rsp+128]
76+
call soft_aes_enc
77+
lea rsi, [rsp+208]
78+
lea rdi, [rsp+144]
79+
call soft_aes_dec
80+
81+
mov rax, qword ptr [rsp+24]
82+
mov rcx, qword ptr [rsp+40]
83+
mov rdx, qword ptr [rsp+48]
84+
mov rbp, qword ptr [rsp+56]
85+
mov rsi, qword ptr [rsp+72]
86+
mov rdi, qword ptr [rsp+80]
87+
mov rbx, qword ptr [rsp+88]
88+
89+
movapd xmm0, xmmword ptr [rsp+96]
90+
movapd xmm1, xmmword ptr [rsp+112]
91+
movapd xmm2, xmmword ptr [rsp+128]
92+
movapd xmm3, xmmword ptr [rsp+144]
93+
94+
movapd xmmword ptr [rcx+0], xmm0
95+
movapd xmmword ptr [rcx+16], xmm1
96+
movapd xmmword ptr [rcx+32], xmm2
97+
movapd xmmword ptr [rcx+48], xmm3

src/asm/program_prologue_linux.inc

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
;# callee-saved registers - System V AMD64 ABI
2-
push rbx
3-
push rbp
4-
push r12
5-
push r13
6-
push r14
7-
push r15
2+
sub rsp, 456
3+
mov qword ptr [rsp+224], rbx
4+
mov qword ptr [rsp+232], rbp
5+
mov qword ptr [rsp+256], r12
6+
mov qword ptr [rsp+264], r13
7+
mov qword ptr [rsp+272], r14
8+
mov qword ptr [rsp+280], r15
89

910
;# function arguments
10-
mov rbx, rcx ;# loop counter
11-
push rdi ;# RegisterFile& registerFile
11+
mov rbx, rcx ;# loop counter
12+
mov qword ptr [rsp+448], rdi ;# RegisterFile& registerFile
1213
mov rcx, rdi
13-
mov rbp, qword ptr [rsi] ;# "mx", "ma"
14-
mov rdi, qword ptr [rsi+8] ;# uint8_t* dataset
15-
mov rsi, rdx ;# uint8_t* scratchpad
14+
mov rbp, qword ptr [rsi] ;# "mx", "ma"
15+
mov rdi, qword ptr [rsi+8] ;# uint8_t* dataset
16+
mov rsi, rdx ;# uint8_t* scratchpad
1617

1718
mov rax, rbp
1819
ror rbp, 32

src/asm/program_prologue_win64.inc

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
11
;# callee-saved registers - Microsoft x64 calling convention
2-
push rbx
3-
push rbp
4-
push rdi
5-
push rsi
6-
push r12
7-
push r13
8-
push r14
9-
push r15
10-
sub rsp, 80
11-
movdqu xmmword ptr [rsp+64], xmm6
12-
movdqu xmmword ptr [rsp+48], xmm7
13-
movdqu xmmword ptr [rsp+32], xmm8
14-
movdqu xmmword ptr [rsp+16], xmm9
15-
movdqu xmmword ptr [rsp+0], xmm10
16-
sub rsp, 80
17-
movdqu xmmword ptr [rsp+64], xmm11
18-
movdqu xmmword ptr [rsp+48], xmm12
19-
movdqu xmmword ptr [rsp+32], xmm13
20-
movdqu xmmword ptr [rsp+16], xmm14
21-
movdqu xmmword ptr [rsp+0], xmm15
2+
sub rsp, 456
3+
mov qword ptr [rsp+224], rbx
4+
mov qword ptr [rsp+232], rbp
5+
mov qword ptr [rsp+240], rsi
6+
mov qword ptr [rsp+248], rdi
7+
mov qword ptr [rsp+256], r12
8+
mov qword ptr [rsp+264], r13
9+
mov qword ptr [rsp+272], r14
10+
mov qword ptr [rsp+280], r15
11+
movdqa xmmword ptr [rsp+288], xmm6
12+
movdqa xmmword ptr [rsp+304], xmm7
13+
movdqa xmmword ptr [rsp+320], xmm8
14+
movdqa xmmword ptr [rsp+336], xmm9
15+
movdqa xmmword ptr [rsp+352], xmm10
16+
movdqa xmmword ptr [rsp+368], xmm11
17+
movdqa xmmword ptr [rsp+384], xmm12
18+
movdqa xmmword ptr [rsp+400], xmm13
19+
movdqa xmmword ptr [rsp+416], xmm14
20+
movdqa xmmword ptr [rsp+432], xmm15
2221

2322
;# function arguments
24-
push rcx ;# RegisterFile& registerFile
25-
mov rbp, qword ptr [rdx] ;# "mx", "ma"
26-
mov rdi, qword ptr [rdx+8] ;# uint8_t* dataset
27-
mov rsi, r8 ;# uint8_t* scratchpad
28-
mov rbx, r9 ;# loop counter
23+
mov qword ptr [rsp+448], rcx ;# RegisterFile& registerFile
24+
mov rbp, qword ptr [rdx] ;# "mx", "ma"
25+
mov rdi, qword ptr [rdx+8] ;# uint8_t* dataset
26+
mov rsi, r8 ;# uint8_t* scratchpad
27+
mov rbx, r9 ;# loop counter
2928

3029
mov rax, rbp
3130
ror rbp, 32
Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
mov rbx, qword ptr [rsp+64]
2-
xor r8, qword ptr [rsp+56]
3-
xor r9, qword ptr [rsp+48]
1+
xor r8, qword ptr [rsp+24]
2+
xor r9, qword ptr [rsp+32]
43
xor r10, qword ptr [rsp+40]
5-
xor r11, qword ptr [rsp+32]
6-
xor r12, qword ptr [rsp+24]
7-
xor r13, qword ptr [rsp+16]
8-
xor r14, qword ptr [rsp+8]
9-
xor r15, qword ptr [rsp+0]
10-
add rsp, 72
4+
xor r11, qword ptr [rsp+48]
5+
xor r12, qword ptr [rsp+56]
6+
xor r13, qword ptr [rsp+64]
7+
xor r14, qword ptr [rsp+72]
8+
xor r15, qword ptr [rsp+80]
9+
mov rbx, qword ptr [rsp+88]

0 commit comments

Comments
 (0)