Messages in this thread | | | Subject | Re: [PATCH] crypto: make michael_block a function | From | Harvey Harrison <> | Date | Fri, 16 May 2008 08:52:03 -0700 |
| |
On Fri, 2008-05-16 at 10:10 +0200, Johannes Berg wrote: > On Fri, 2008-05-16 at 09:01 +0200, Sebastian Siewior wrote: > > * Harvey Harrison | 2008-05-15 23:17:17 [-0700]: > > > > >Make the michael_block macro a function and change the calling > > >function to take a struct michael_mic_ctx * and the value for > > >the initial xor with ctx->l. > > > > > >Also open-code xswap in its one use in michael_block. > > Does this change have any performance impact? > > The only user is wireless (I guess). Is it used frequently (sign every > > packet for instance) or once in a while (in every re-keying)? > > Every packet. I have no idea whether it has performance impact, very > hard to even guess. >
Well, the code-size difference is significant (about 200 bytes smaller on X86-32). This macro is essentially an inline function that is pretty large.
Attached find the objdump -d of the original and after the patch. As it is, this code isn't used anywhere that I can find as mac80211 has its own implementation, I'm trying to see if there is much advantage in keeping the private version over moving to the crypto one.
Harvey
crypto/michael_mic.o: file format elf32-i386
Disassembly of section .text:
00000000 <michael_setkey>: 0: 83 f9 08 cmp $0x8,%ecx 3: 53 push %ebx 4: 89 d3 mov %edx,%ebx 6: 74 0d je 15 <michael_setkey+0x15> 8: 81 08 00 00 20 00 orl $0x200000,(%eax) e: b8 ea ff ff ff mov $0xffffffea,%eax 13: eb 10 jmp 25 <michael_setkey+0x25> 15: 8b 12 mov (%edx),%edx 17: 83 c0 30 add $0x30,%eax 1a: 89 50 08 mov %edx,0x8(%eax) 1d: 8b 53 04 mov 0x4(%ebx),%edx 20: 89 50 0c mov %edx,0xc(%eax) 23: 31 c0 xor %eax,%eax 25: 5b pop %ebx 26: c3 ret
00000027 <michael_init>: 27: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax) 2e: c3 ret
0000002f <michael_update>: 2f: 55 push %ebp 30: 89 cd mov %ecx,%ebp 32: 57 push %edi 33: 56 push %esi 34: 53 push %ebx 35: 89 c3 mov %eax,%ebx 37: 83 ec 08 sub $0x8,%esp 3a: 83 c3 30 add $0x30,%ebx 3d: 89 44 24 04 mov %eax,0x4(%esp) 41: 89 14 24 mov %edx,(%esp) 44: 8b 73 04 mov 0x4(%ebx),%esi 47: 85 f6 test %esi,%esi 49: 0f 84 93 00 00 00 je e2 <michael_update+0xb3> 4f: b8 04 00 00 00 mov $0x4,%eax 54: 29 f0 sub %esi,%eax 56: 39 c8 cmp %ecx,%eax 58: 89 c2 mov %eax,%edx 5a: 0f 47 d1 cmova %ecx,%edx 5d: 89 d1 mov %edx,%ecx 5f: 8d 3c 33 lea (%ebx,%esi,1),%edi 62: 8b 34 24 mov (%esp),%esi 65: c1 e9 02 shr $0x2,%ecx 68: f3 a5 rep movsl %ds:(%esi),%es:(%edi) 6a: 89 d1 mov %edx,%ecx 6c: 83 e1 03 and $0x3,%ecx 6f: 74 02 je 73 <michael_update+0x44> 71: f3 a4 rep movsb %ds:(%esi),%es:(%edi) 73: 89 d0 mov %edx,%eax 75: 03 43 04 add 0x4(%ebx),%eax 78: 83 f8 03 cmp $0x3,%eax 7b: 89 43 04 mov %eax,0x4(%ebx) 7e: 0f 86 d2 00 00 00 jbe 156 <michael_update+0x127> 84: 8b 44 24 04 mov 0x4(%esp),%eax 88: 29 d5 sub %edx,%ebp 8a: 01 14 24 add %edx,(%esp) 8d: 8b 53 08 mov 0x8(%ebx),%edx 90: 33 50 30 xor 0x30(%eax),%edx 93: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx) 9a: 89 53 08 mov %edx,0x8(%ebx) 9d: c1 ca 0f ror $0xf,%edx a0: 33 53 0c xor 0xc(%ebx),%edx a3: 89 d0 mov %edx,%eax a5: 03 43 08 add 0x8(%ebx),%eax a8: 89 c1 mov %eax,%ecx aa: 89 43 08 mov %eax,0x8(%ebx) ad: 81 e1 00 ff 00 ff and $0xff00ff00,%ecx b3: 25 ff 00 ff 00 and $0xff00ff,%eax b8: c1 e0 08 shl $0x8,%eax bb: c1 e9 08 shr $0x8,%ecx be: 09 c1 or %eax,%ecx c0: 31 d1 xor %edx,%ecx c2: 89 ca mov %ecx,%edx c4: 03 53 08 add 0x8(%ebx),%edx c7: 89 53 08 mov %edx,0x8(%ebx) ca: c1 ca 1d ror $0x1d,%edx cd: 31 ca xor %ecx,%edx cf: 89 d0 mov %edx,%eax d1: 03 43 08 add 0x8(%ebx),%eax d4: 89 43 08 mov %eax,0x8(%ebx) d7: c1 c8 02 ror $0x2,%eax da: 31 d0 xor %edx,%eax dc: 01 43 08 add %eax,0x8(%ebx) df: 89 43 0c mov %eax,0xc(%ebx) e2: 8b 34 24 mov (%esp),%esi e5: eb 54 jmp 13b <michael_update+0x10c> e7: 8b 53 08 mov 0x8(%ebx),%edx ea: 83 c6 04 add $0x4,%esi ed: 83 ed 04 sub $0x4,%ebp f0: 33 56 fc xor -0x4(%esi),%edx f3: 89 53 08 mov %edx,0x8(%ebx) f6: c1 ca 0f ror $0xf,%edx f9: 33 53 0c xor 0xc(%ebx),%edx fc: 89 d0 mov %edx,%eax fe: 03 43 08 add 0x8(%ebx),%eax 101: 89 c1 mov %eax,%ecx 103: 89 43 08 mov %eax,0x8(%ebx) 106: 81 e1 00 ff 00 ff and $0xff00ff00,%ecx 10c: 25 ff 00 ff 00 and $0xff00ff,%eax 111: c1 e0 08 shl $0x8,%eax 114: c1 e9 08 shr $0x8,%ecx 117: 09 c1 or %eax,%ecx 119: 31 d1 xor %edx,%ecx 11b: 89 ca mov %ecx,%edx 11d: 03 53 08 add 0x8(%ebx),%edx 120: 89 53 08 mov %edx,0x8(%ebx) 123: c1 ca 1d ror $0x1d,%edx 126: 31 ca xor %ecx,%edx 128: 89 d0 mov %edx,%eax 12a: 03 43 08 add 0x8(%ebx),%eax 12d: 89 43 08 mov %eax,0x8(%ebx) 130: c1 c8 02 ror $0x2,%eax 133: 31 d0 xor %edx,%eax 135: 01 43 08 add %eax,0x8(%ebx) 138: 89 43 0c mov %eax,0xc(%ebx) 13b: 83 fd 03 cmp $0x3,%ebp 13e: 77 a7 ja e7 <michael_update+0xb8> 140: 85 ed test %ebp,%ebp 142: 74 12 je 156 <michael_update+0x127> 144: 89 6b 04 mov %ebp,0x4(%ebx) 147: 31 c9 xor %ecx,%ecx 149: 89 df mov %ebx,%edi 14b: f3 a5 rep movsl %ds:(%esi),%es:(%edi) 14d: 89 e9 mov %ebp,%ecx 14f: 83 e1 03 and $0x3,%ecx 152: 74 02 je 156 <michael_update+0x127> 154: f3 a4 rep movsb %ds:(%esi),%es:(%edi) 156: 58 pop %eax 157: 5a pop %edx 158: 5b pop %ebx 159: 5e pop %esi 15a: 5f pop %edi 15b: 5d pop %ebp 15c: c3 ret
0000015d <michael_final>: 15d: 57 push %edi 15e: 89 d7 mov %edx,%edi 160: 56 push %esi 161: 8d 70 30 lea 0x30(%eax),%esi 164: 53 push %ebx 165: 8b 56 04 mov 0x4(%esi),%edx 168: 83 fa 01 cmp $0x1,%edx 16b: 74 14 je 181 <michael_final+0x24> 16d: 72 0c jb 17b <michael_final+0x1e> 16f: 83 fa 02 cmp $0x2,%edx 172: 74 16 je 18a <michael_final+0x2d> 174: 83 fa 03 cmp $0x3,%edx 177: 75 47 jne 1c0 <michael_final+0x63> 179: eb 27 jmp 1a2 <michael_final+0x45> 17b: 83 76 08 5a xorl $0x5a,0x8(%esi) 17f: eb 3f jmp 1c0 <michael_final+0x63> 181: 0f b6 40 30 movzbl 0x30(%eax),%eax 185: 80 cc 5a or $0x5a,%ah 188: eb 33 jmp 1bd <michael_final+0x60> 18a: 0f b6 50 30 movzbl 0x30(%eax),%edx 18e: 0f b6 46 01 movzbl 0x1(%esi),%eax 192: 81 ca 00 00 5a 00 or $0x5a0000,%edx 198: c1 e0 08 shl $0x8,%eax 19b: 09 c2 or %eax,%edx 19d: 31 56 08 xor %edx,0x8(%esi) 1a0: eb 1e jmp 1c0 <michael_final+0x63> 1a2: 0f b6 40 30 movzbl 0x30(%eax),%eax 1a6: 0f b6 56 01 movzbl 0x1(%esi),%edx 1aa: 0d 00 00 00 5a or $0x5a000000,%eax 1af: c1 e2 08 shl $0x8,%edx 1b2: 09 d0 or %edx,%eax 1b4: 0f b6 56 02 movzbl 0x2(%esi),%edx 1b8: c1 e2 10 shl $0x10,%edx 1bb: 09 d0 or %edx,%eax 1bd: 31 46 08 xor %eax,0x8(%esi) 1c0: 8b 4e 08 mov 0x8(%esi),%ecx 1c3: c1 c9 0f ror $0xf,%ecx 1c6: 33 4e 0c xor 0xc(%esi),%ecx 1c9: 89 c8 mov %ecx,%eax 1cb: 03 46 08 add 0x8(%esi),%eax 1ce: 89 c2 mov %eax,%edx 1d0: 89 46 08 mov %eax,0x8(%esi) 1d3: 81 e2 00 ff 00 ff and $0xff00ff00,%edx 1d9: 25 ff 00 ff 00 and $0xff00ff,%eax 1de: c1 e0 08 shl $0x8,%eax 1e1: c1 ea 08 shr $0x8,%edx 1e4: 09 c2 or %eax,%edx 1e6: 31 ca xor %ecx,%edx 1e8: 89 d0 mov %edx,%eax 1ea: 03 46 08 add 0x8(%esi),%eax 1ed: 89 46 08 mov %eax,0x8(%esi) 1f0: c1 c8 1d ror $0x1d,%eax 1f3: 31 d0 xor %edx,%eax 1f5: 89 c2 mov %eax,%edx 1f7: 03 56 08 add 0x8(%esi),%edx 1fa: 89 56 08 mov %edx,0x8(%esi) 1fd: c1 ca 02 ror $0x2,%edx 200: 31 c2 xor %eax,%edx 202: 89 d3 mov %edx,%ebx 204: 03 5e 08 add 0x8(%esi),%ebx 207: 89 5e 08 mov %ebx,0x8(%esi) 20a: c1 cb 0f ror $0xf,%ebx 20d: 31 d3 xor %edx,%ebx 20f: 89 d8 mov %ebx,%eax 211: 03 46 08 add 0x8(%esi),%eax 214: 89 c1 mov %eax,%ecx 216: 89 46 08 mov %eax,0x8(%esi) 219: 81 e1 00 ff 00 ff and $0xff00ff00,%ecx 21f: 25 ff 00 ff 00 and $0xff00ff,%eax 224: c1 e0 08 shl $0x8,%eax 227: c1 e9 08 shr $0x8,%ecx 22a: 09 c1 or %eax,%ecx 22c: 31 d9 xor %ebx,%ecx 22e: 89 ca mov %ecx,%edx 230: 03 56 08 add 0x8(%esi),%edx 233: 89 56 08 mov %edx,0x8(%esi) 236: c1 ca 1d ror $0x1d,%edx 239: 31 ca xor %ecx,%edx 23b: 89 d1 mov %edx,%ecx 23d: 03 4e 08 add 0x8(%esi),%ecx 240: 89 c8 mov %ecx,%eax 242: c1 c8 02 ror $0x2,%eax 245: 31 d0 xor %edx,%eax 247: 89 46 0c mov %eax,0xc(%esi) 24a: 01 c8 add %ecx,%eax 24c: 89 46 08 mov %eax,0x8(%esi) 24f: 89 07 mov %eax,(%edi) 251: 8b 46 0c mov 0xc(%esi),%eax 254: 5b pop %ebx 255: 5e pop %esi 256: 89 47 04 mov %eax,0x4(%edi) 259: 5f pop %edi 25a: c3 ret Disassembly of section .init.text:
00000000 <michael_mic_init>: 0: b8 00 00 00 00 mov $0x0,%eax 5: e9 fc ff ff ff jmp 6 <michael_mic_init+0x6> Disassembly of section .exit.text:
00000000 <michael_mic_exit>: 0: b8 00 00 00 00 mov $0x0,%eax 5: e9 fc ff ff ff jmp 6 <michael_mic_exit+0x6>
crypto/michael_mic.o: file format elf32-i386
Disassembly of section .text:
00000000 <michael_block>: 0: 33 50 08 xor 0x8(%eax),%edx 3: 53 push %ebx 4: 89 d1 mov %edx,%ecx 6: c1 c9 0f ror $0xf,%ecx 9: 33 48 0c xor 0xc(%eax),%ecx c: 8d 14 11 lea (%ecx,%edx,1),%edx f: 89 d3 mov %edx,%ebx 11: 89 50 08 mov %edx,0x8(%eax) 14: 81 e3 00 ff 00 ff and $0xff00ff00,%ebx 1a: 81 e2 ff 00 ff 00 and $0xff00ff,%edx 20: c1 e2 08 shl $0x8,%edx 23: c1 eb 08 shr $0x8,%ebx 26: 09 d3 or %edx,%ebx 28: 31 cb xor %ecx,%ebx 2a: 89 d9 mov %ebx,%ecx 2c: 03 48 08 add 0x8(%eax),%ecx 2f: 89 48 08 mov %ecx,0x8(%eax) 32: c1 c9 1d ror $0x1d,%ecx 35: 31 d9 xor %ebx,%ecx 37: 89 ca mov %ecx,%edx 39: 03 50 08 add 0x8(%eax),%edx 3c: 5b pop %ebx 3d: 89 50 08 mov %edx,0x8(%eax) 40: c1 ca 02 ror $0x2,%edx 43: 31 ca xor %ecx,%edx 45: 01 50 08 add %edx,0x8(%eax) 48: 89 50 0c mov %edx,0xc(%eax) 4b: c3 ret
0000004c <michael_setkey>: 4c: 83 f9 08 cmp $0x8,%ecx 4f: 53 push %ebx 50: 89 d3 mov %edx,%ebx 52: 74 0d je 61 <michael_setkey+0x15> 54: 81 08 00 00 20 00 orl $0x200000,(%eax) 5a: b8 ea ff ff ff mov $0xffffffea,%eax 5f: eb 10 jmp 71 <michael_setkey+0x25> 61: 8b 12 mov (%edx),%edx 63: 83 c0 30 add $0x30,%eax 66: 89 50 08 mov %edx,0x8(%eax) 69: 8b 53 04 mov 0x4(%ebx),%edx 6c: 89 50 0c mov %edx,0xc(%eax) 6f: 31 c0 xor %eax,%eax 71: 5b pop %ebx 72: c3 ret
00000073 <michael_init>: 73: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax) 7a: c3 ret
0000007b <michael_update>: 7b: 55 push %ebp 7c: 89 c5 mov %eax,%ebp 7e: 57 push %edi 7f: 83 c5 30 add $0x30,%ebp 82: 56 push %esi 83: 53 push %ebx 84: 89 cb mov %ecx,%ebx 86: 83 ec 08 sub $0x8,%esp 89: 89 44 24 04 mov %eax,0x4(%esp) 8d: 89 14 24 mov %edx,(%esp) 90: 8b 75 04 mov 0x4(%ebp),%esi 93: 85 f6 test %esi,%esi 95: 74 4c je e3 <michael_update+0x68> 97: b8 04 00 00 00 mov $0x4,%eax 9c: 29 f0 sub %esi,%eax 9e: 39 c8 cmp %ecx,%eax a0: 89 c2 mov %eax,%edx a2: 0f 47 d1 cmova %ecx,%edx a5: 89 d1 mov %edx,%ecx a7: 8d 7c 35 00 lea 0x0(%ebp,%esi,1),%edi ab: 8b 34 24 mov (%esp),%esi ae: c1 e9 02 shr $0x2,%ecx b1: f3 a5 rep movsl %ds:(%esi),%es:(%edi) b3: 89 d1 mov %edx,%ecx b5: 83 e1 03 and $0x3,%ecx b8: 74 02 je bc <michael_update+0x41> ba: f3 a4 rep movsb %ds:(%esi),%es:(%edi) bc: 89 d0 mov %edx,%eax be: 03 45 04 add 0x4(%ebp),%eax c1: 83 f8 03 cmp $0x3,%eax c4: 89 45 04 mov %eax,0x4(%ebp) c7: 76 4a jbe 113 <michael_update+0x98> c9: 8b 44 24 04 mov 0x4(%esp),%eax cd: 29 d3 sub %edx,%ebx cf: 01 14 24 add %edx,(%esp) d2: 8b 50 30 mov 0x30(%eax),%edx d5: 89 e8 mov %ebp,%eax d7: e8 24 ff ff ff call 0 <michael_block> dc: c7 45 04 00 00 00 00 movl $0x0,0x4(%ebp) e3: 8b 34 24 mov (%esp),%esi e6: eb 10 jmp f8 <michael_update+0x7d> e8: 83 c6 04 add $0x4,%esi eb: 89 e8 mov %ebp,%eax ed: 8b 56 fc mov -0x4(%esi),%edx f0: 83 eb 04 sub $0x4,%ebx f3: e8 08 ff ff ff call 0 <michael_block> f8: 83 fb 03 cmp $0x3,%ebx fb: 77 eb ja e8 <michael_update+0x6d> fd: 85 db test %ebx,%ebx ff: 74 12 je 113 <michael_update+0x98> 101: 89 5d 04 mov %ebx,0x4(%ebp) 104: 31 c9 xor %ecx,%ecx 106: 89 ef mov %ebp,%edi 108: f3 a5 rep movsl %ds:(%esi),%es:(%edi) 10a: 89 d9 mov %ebx,%ecx 10c: 83 e1 03 and $0x3,%ecx 10f: 74 02 je 113 <michael_update+0x98> 111: f3 a4 rep movsb %ds:(%esi),%es:(%edi) 113: 58 pop %eax 114: 5a pop %edx 115: 5b pop %ebx 116: 5e pop %esi 117: 5f pop %edi 118: 5d pop %ebp 119: c3 ret
0000011a <michael_final>: 11a: 56 push %esi 11b: 89 d6 mov %edx,%esi 11d: 53 push %ebx 11e: 8d 58 30 lea 0x30(%eax),%ebx 121: 8b 43 04 mov 0x4(%ebx),%eax 124: 83 f8 02 cmp $0x2,%eax 127: 74 14 je 13d <michael_final+0x23> 129: 83 f8 03 cmp $0x3,%eax 12c: 74 16 je 144 <michael_final+0x2a> 12e: 48 dec %eax 12f: ba 5a 00 00 00 mov $0x5a,%edx 134: b9 5a 00 00 00 mov $0x5a,%ecx 139: 74 1b je 156 <michael_final+0x3c> 13b: eb 23 jmp 160 <michael_final+0x46> 13d: b8 5a 00 00 00 mov $0x5a,%eax 142: eb 07 jmp 14b <michael_final+0x31> 144: 0f b6 43 02 movzbl 0x2(%ebx),%eax 148: 80 cc 5a or $0x5a,%ah 14b: 89 c1 mov %eax,%ecx 14d: 0f b6 43 01 movzbl 0x1(%ebx),%eax 151: c1 e1 08 shl $0x8,%ecx 154: 09 c1 or %eax,%ecx 156: 0f b6 03 movzbl (%ebx),%eax 159: 89 ca mov %ecx,%edx 15b: c1 e2 08 shl $0x8,%edx 15e: 09 c2 or %eax,%edx 160: 89 d8 mov %ebx,%eax 162: e8 99 fe ff ff call 0 <michael_block> 167: 89 d8 mov %ebx,%eax 169: 31 d2 xor %edx,%edx 16b: e8 90 fe ff ff call 0 <michael_block> 170: 8b 43 08 mov 0x8(%ebx),%eax 173: 89 06 mov %eax,(%esi) 175: 8b 43 0c mov 0xc(%ebx),%eax 178: 5b pop %ebx 179: 89 46 04 mov %eax,0x4(%esi) 17c: 5e pop %esi 17d: c3 ret Disassembly of section .init.text:
00000000 <michael_mic_init>: 0: b8 00 00 00 00 mov $0x0,%eax 5: e9 fc ff ff ff jmp 6 <michael_mic_init+0x6> Disassembly of section .exit.text:
00000000 <michael_mic_exit>: 0: b8 00 00 00 00 mov $0x0,%eax 5: e9 fc ff ff ff jmp 6 <michael_mic_exit+0x6>
| |