Skip to content

Commit 6c947f8

Browse files
committed
Added CRC32 tests
1 parent 0817924 commit 6c947f8

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

CRC32/crc32-reversed.pb

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
; http://www.simplycalc.com/crc32-text.php#
2+
; function CRC32REV(polynomial) {
3+
; reversed = 0
4+
; for (i = 0; i < 32; i++) {
5+
; reversed = reversed << 1
6+
; reversed = reversed | ((polynomial >> i) & 1)
7+
; }
8+
; return reversed
9+
; }
10+
11+
Procedure CRC32REV(polynomial)
12+
Protected reversed = 0
13+
For i = 0 To 31
14+
reversed = (reversed << 1) | ((polynomial >> i) & 1)
15+
Next
16+
ProcedureReturn reversed
17+
EndProcedure
18+
19+
Debug Hex(CRC32REV($04C11DB7))
20+
; IDE Options = PureBasic 5.31 (Linux - x64)
21+
; CursorPosition = 11
22+
; Folding = -
23+
; EnableUnicode
24+
; EnableXP

CRC32/crc32-reversed.s

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
;==========================================================
2+
; ASM Testcase
3+
; flype, 2015-09-25
4+
; crc32_reversed($04C11DB7) = $EDB88320
5+
;==========================================================
6+
; http://pastebin.com/3kpLUxMQ
7+
; http://www.simplycalc.com/crc32-text.php#
8+
;==========================================================
9+
10+
; function crc32_reversed(polynomial) {
11+
; reversed = 0
12+
; for (i = 0; i < 32; i++) {
13+
; reversed = ((reversed << 1) | ((polynomial >> i) & 1))
14+
; }
15+
; return reversed
16+
; }
17+
18+
;==========================================================
19+
; Constants
20+
;==========================================================
21+
22+
ASSERT_ZERO EQU $00D0000C
23+
24+
;==========================================================
25+
; MAIN()
26+
; A0 = Polynomials
27+
; A1 = Polynomials, Precalculated
28+
; D0 = Result of CRC32REV()
29+
;==========================================================
30+
31+
START:
32+
LEA POLYNOMIAL,A0 ; polynomial = $04C11DB7 (input)
33+
LEA REVERSED,A1 ; reversed = $EDB88320 (precalc)
34+
LOOP:
35+
JSR CRC32REV ; CRC32REV(polynomial)
36+
SUB.L (A1)+,D0 ; result = result - reversed
37+
MOVE.L D0,ASSERT_ZERO ; Assert D0 == 0
38+
CMP.L #0,(A0)+ ; Check if last polynomial
39+
BNE LOOP ; Continue while != 0
40+
EXIT:
41+
RTS
42+
43+
;==========================================================
44+
; CRC32REV()
45+
; Input : A0 = polynomial ($04C11DB7)
46+
; Output : D0 = reversed ($EDB88320)
47+
;==========================================================
48+
49+
CRC32REV:
50+
CLR.L D0 ; reversed = 0
51+
CLR.L D1 ; polynomial = 0
52+
CLR.L D2 ; tmp = 0
53+
CLR.L D3 ; i = 0
54+
CRC32REV_LOOP: ; for (i = 0; i < 32; i++)
55+
MOVE.L (A0),D1 ; polynomial
56+
ASR.L D3,D1 ; tmp = (polynomial >> i)
57+
ASL.L #1,D0 ; reversed = (reversed << 1)
58+
ANDI.L #1,D1 ; tmp = (tmp & 1)
59+
ADDQ.B #1,D3 ; i++
60+
OR.L D1,D0 ; reversed = (reversed | tmp)
61+
CMP.L #32,D3 ; i < 32
62+
BNE CRC32REV_LOOP ; continue
63+
RTS ; return reversed
64+
65+
;==========================================================
66+
; Data Section
67+
;==========================================================
68+
69+
POLYNOMIAL:
70+
DC.L $04C11DB7,$71625344,$01010101,$0ABEEFC3
71+
DC.L $12345678,$00007FFF,$7FFFFFFF,$FFFFFFFF
72+
DC.L 0
73+
74+
REVERSED:
75+
DC.L $EDB88320,$22CA468E,$80808080,$C3F77D50
76+
DC.L $1E6A2C48,$FFFE0000,$FFFFFFFE,$FFFFFFFF
77+
DC.L 0
78+
79+
;==========================================================
80+
; End of file
81+
;==========================================================

0 commit comments

Comments
 (0)