You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CubeSatSim/libs/libmf/builtsource/crc32ansimsb.c

62 lines
909 B

#include "libmfcrc.h"
#define crc_msb_byte crc_crc32_msb_byte
#define crc_msbtable crc_crc32_msbtable
#define crc_msbtable_asm _crc_crc32_msbtable
#if defined(SDCC)
__reentrantb uint32_t crc_msb_byte(uint32_t crc, uint8_t c) __reentrant __naked
{
crc;
c;
__asm;
mov r2,a
mov a,sp
add a,#-2
mov r0,a
mov a,@r0
xrl a,r2
rl a
rl a
mov r3,a
anl a,#0xfc
add a,#crc_msbtable_asm
xch a,dpl
mov r2,a
mov a,r3
anl a,#0x03
addc a,#(crc_msbtable_asm >> 8)
xch a,dph
mov r3,a
mov a,#1
movc a,@a+dptr
xrl a,r2
mov r2,a
mov a,#2
movc a,@a+dptr
xrl a,r3
mov r3,a
mov a,#3
movc a,@a+dptr
xrl a,b
mov r4,a
clr a
movc a,@a+dptr
mov dpl,a
mov dph,r2
mov b,r3
mov a,r4
ret
__endasm;
}
#else
__reentrantb uint32_t crc_msb_byte(uint32_t crc, uint8_t c) __reentrant
{
return (crc << 8) ^ crc_msbtable[((uint8_t)(crc >> 24) ^ c) & (uint8_t)0xff];
}
#endif

Powered by TurnKey Linux.