contrib: add ram loader src code
[openocd.git] / contrib / loaders / checksum / mips32.s
blobf8f08a230636900f5c209fa749e495edb97533c5
1 /***************************************************************************
2 * Copyright (C) 2010 by Spencer Oliver *
3 * spen@spen-soft.co.uk *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 .global main
22 .text
23 .set noreorder
25 /* params:
26 * $a0 address in
27 * $a1 byte count
28 * vars
29 * $a0 crc
30 * $a1 crc data byte
31 * temps:
32 * t3 v0 a3 a2 t0 v1
35 .ent main
36 main:
37 addiu $t4, $a0, 0 /* address in */
38 addiu $t2, $a1, 0 /* count */
40 addiu $a0, $zero, 0xffffffff /* a0 crc - result */
42 beq $zero, $zero, ncomp
43 addiu $t3, $zero, 0 /* clear bytes read */
45 nbyte:
46 lb $a1, ($t4) /* load byte from source address */
47 addi $t4, $t4, 1 /* inc byte count */
49 crc:
50 sll $a1, $a1, 24
51 lui $v0, 0x04c1
52 xor $a0, $a0, $a1
53 ori $a3, $v0, 0x1db7
54 addu $a2, $zero, $zero /* clear bit count */
55 loop:
56 sll $t0, $a0, 1
57 addiu $a2, $a2, 1 /* inc bit count */
58 slti $a0, $a0, 0
59 xor $t1, $t0, $a3
60 movn $t0, $t1, $a0
61 slti $v1, $a2, 8 /* 8bits processed */
62 bne $v1, $zero, loop
63 addu $a0, $t0, $zero
65 ncomp:
66 bne $t2, $t3, nbyte /* all bytes processed */
67 addiu $t3, $t3, 1
69 wait:
70 sdbbp
72 .end main