Created
April 23, 2014 04:23
-
-
Save iamgreaser/11202672 to your computer and use it in GitHub Desktop.
ARM is pretty, slightly faster edition
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.global crc_asm02 /* uint32_t crc_asm02(void *buf, uint32_t len); */ | |
.extern tab_asm02 /* uint32_t tab_asm02[256]; */ | |
crc_asm02: | |
push {r4, r5, r6} | |
/* prepare table */ | |
mov r4, #0x00 | |
ldr r5, =tab_asm02 | |
ldr r3, =0xEDB88320 | |
.L2A: | |
mov r2, r4 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
lsrs r2, #1 | |
eorcs r2, r3 | |
str r2, [r5] | |
add r4, #1 | |
add r5, #4 | |
cmp r4, #0x100 | |
bne .L2A | |
/* perform CRC */ | |
mvn r2, #0 | |
ldr r6, =tab_asm02 | |
.L2: | |
ldrb r4, [r0] | |
add r0, #1 | |
eor r2, r4 | |
and r5, r2, #0x000000FF | |
ldr r4, [r6, r5, lsl #2] | |
eor r2, r4, r2, lsr #8 | |
subs r1, #1 | |
bne .L2 | |
mvn r0, r2 | |
pop {r4, r5, r6} | |
bx lr |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment