Module Name: src
Committed By: jakllsch
Date: Sat May 19 18:18:16 UTC 2018
Modified Files:
src/sys/arch/i386/stand/mbr: gpt.S
Log Message:
Compact crc32 code by 12 bytes of text.
>From dave0 in #NetBSD on Freenode circa December 2017.
Tested in a 32-bit userland harness to produce identical results as old
code for one set of inputs.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/i386/stand/mbr/gpt.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/i386/stand/mbr/gpt.S
diff -u src/sys/arch/i386/stand/mbr/gpt.S:1.1 src/sys/arch/i386/stand/mbr/gpt.S:1.2
--- src/sys/arch/i386/stand/mbr/gpt.S:1.1 Thu Jan 6 01:08:49 2011
+++ src/sys/arch/i386/stand/mbr/gpt.S Sat May 19 18:18:16 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: gpt.S,v 1.1 2011/01/06 01:08:49 jakllsch Exp $ */
+/* $NetBSD: gpt.S,v 1.2 2018/05/19 18:18:16 jakllsch Exp $ */
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -428,21 +428,14 @@ message_1:
* %ebx crc (returned)
*/
crc32:
- push %dx /* preserve drive number */
- push %ax /* preserve original CRC */
-
- xorl %ebx, %ebx
- decl %ebx /* init value */
+ orl $-1, %ebx /* init value */
1:
- lodsb /* load next message byte to %al */
+ xorb (%si), %bl /* xoring next message byte with previous result */
+ inc %si
movb $8, %cl /* set bit counter */
2:
- movb %al, %dl
- xorb %bl, %dl /* xoring with previous result */
shrl $1, %ebx
- shrb $1, %al
- testb $1, %dl
- jz 3f
+ jnc 3f
crc32_poly = . + 3 /* gross, but saves a few bytes */
xorl $0xedb88320, %ebx /* EFI CRC32 Polynomial */
3:
@@ -451,8 +444,6 @@ crc32_poly = . + 3 /* gross, but saves
jne 1b
notl %ebx /* result correction */
- pop %ax
- pop %dx
ret
#endif