Skip to content

Instantly share code, notes, and snippets.

@iamgreaser
Created April 23, 2014 04:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iamgreaser/11202672 to your computer and use it in GitHub Desktop.
Save iamgreaser/11202672 to your computer and use it in GitHub Desktop.
ARM is pretty, slightly faster edition
.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