-dnl AES_LAST_ROUND(a, b, c, d)
-dnl Leaves result in %edi
-dnl Note that we have to quote $ in constants.
-define(<AES_LAST_ROUND>, <
- movl %e<>$1<>x,%edi
- andl <$>0x000000ff,%edi
- movl %e<>$2<>x,%ebp
- andl <$>0x0000ff00,%ebp
- orl %ebp,%edi
- movl %e<>$3<>x,%ebp
- andl <$>0x00ff0000,%ebp
- orl %ebp,%edi
- movl %e<>$4<>x,%ebp
- andl <$>0xff000000,%ebp
- orl %ebp,%edi>)dnl
-
dnl AES_LOAD(key, src)
dnl Loads the next block of data from src, and add the subkey pointed
dnl to by key.
movl %ebx,4($2)
movl %ecx,8($2)
movl %edx,12($2)>)dnl
+
+dnl AES_ROUND(table,a,b,c,d)
+dnl Computes one word of the AES round. Leaves result in %edi.
+define(<AES_ROUND>, <
+ movl %e<>$2<>x, %esi
+ andl <$>0xff, %esi
+ shll <$>2,%esi C index in table
+ movl AES_TABLE0 + $1 (%esi),%edi
+ movl %e<>$3<>x, %esi
+ shrl <$>6,%esi
+ andl <$>0x000003fc,%esi C clear all but offset bytes
+ xorl AES_TABLE1 + $1 (%esi),%edi
+ movl %e<>$4<>x,%esi C third one
+ shrl <$>14,%esi
+ andl <$>0x000003fc,%esi
+ xorl AES_TABLE2 + $1 (%esi),%edi
+ movl %e<>$5<>x,%esi C fourth one
+ shrl <$>22,%esi
+ andl <$>0x000003fc,%esi
+ xorl AES_TABLE3 + $1 (%esi),%edi>)dnl
+
+dnl AES_LAST_ROUND(a, b, c, d)
+dnl Computes one word of the final round. Leaves result in %edi.
+dnl Note that we have to quote $ in constants.
+define(<AES_LAST_ROUND>, <
+ movl %e<>$1<>x,%edi
+ andl <$>0x000000ff,%edi
+ movl %e<>$2<>x,%ebp
+ andl <$>0x0000ff00,%ebp
+ orl %ebp,%edi
+ movl %e<>$3<>x,%ebp
+ andl <$>0x00ff0000,%ebp
+ orl %ebp,%edi
+ movl %e<>$4<>x,%ebp
+ andl <$>0xff000000,%ebp
+ orl %ebp,%edi>)dnl
+