contrib: replace the GPLv2-or-later license tag
[fw/openocd] / contrib / loaders / checksum / mips32.s
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /***************************************************************************
4  *   Copyright (C) 2010 by Spencer Oliver                                  *
5  *   spen@spen-soft.co.uk                                                  *
6  ***************************************************************************/
7
8         .global main
9         .text
10         .set noreorder
11
12 /* params:
13  * $a0 address in
14  * $a1 byte count
15  * vars
16  * $a0 crc
17  * $a1 crc data byte
18  * temps:
19  * t3 v0 a3 a2 t0 v1
20  */
21
22 .ent main
23 main:
24         addiu   $t4, $a0, 0             /* address in */
25         addiu   $t2, $a1, 0             /* count */
26
27         addiu   $a0, $zero, 0xffffffff /* a0 crc - result */
28
29         beq             $zero, $zero, ncomp
30         addiu   $t3, $zero, 0   /* clear bytes read */
31
32 nbyte:
33         lb              $a1, ($t4)              /* load byte from source address */
34         addi    $t4, $t4, 1             /* inc byte count */
35
36 crc:
37         sll             $a1, $a1, 24
38         lui             $v0, 0x04c1
39         xor             $a0, $a0, $a1
40         ori             $a3, $v0, 0x1db7
41         addu    $a2, $zero, $zero /* clear bit count */
42 loop:
43         sll             $t0, $a0, 1
44         addiu   $a2, $a2, 1             /* inc bit count */
45         slti    $a0, $a0, 0
46         xor             $t1, $t0, $a3
47         movn    $t0, $t1, $a0
48         slti    $v1, $a2, 8             /* 8bits processed */
49         bne             $v1, $zero, loop
50         addu    $a0, $t0, $zero
51
52 ncomp:
53         bne             $t2, $t3, nbyte /* all bytes processed */
54         addiu   $t3, $t3, 1
55
56 wait:
57         sdbbp
58
59 .end main