5 template <typename Tword>
6 inline Tword* encrypt(Tword *data) {
7
8 asm volatile ("stp x0,x1,[sp,-16];"
9 "adr x1,%0;"
10 "ldr x0,[x1];"
11 "rev16 w0,w0;"
12 "rev32 x0,x0;"
13 "rev64 x0,x0;"
14 "mvn x0,x0;"
15 "rbit x0,x0;"
16 "ldr x1,[x1];"
17 "ror x1,x1,4;"
18 "eon x1,x1,x0;"
19 "adr x0,%0;"
20 "str x1,[x0];"
21 "adr x0,%1;"
22 "strb w1,[x0];"
23 "ldp x0,x1,[sp,-16];"
24 :
25 : "r" (&data[0]),"r" (&data[1])
26 :
27 );
28
29 delete[] adr;
30 return data;
31
32 }