ipdbg: fix double free of virtual-ir data
[openocd.git] / contrib / loaders / checksum / mips32.s
blob52de547b45e9599bbd8ceeb4b0d7f406e0e75b17
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2010 by Spencer Oliver *
5 * spen@spen-soft.co.uk *
6 ***************************************************************************/
8 .global main
9 .text
10 .set noreorder
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
22 .ent main
23 main:
24 addiu $t4, $a0, 0 /* address in */
25 addiu $t2, $a1, 0 /* count */
27 addiu $a0, $zero, 0xffffffff /* a0 crc - result */
29 beq $zero, $zero, ncomp
30 addiu $t3, $zero, 0 /* clear bytes read */
32 nbyte:
33 lb $a1, ($t4) /* load byte from source address */
34 addi $t4, $t4, 1 /* inc byte count */
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
52 ncomp:
53 bne $t2, $t3, nbyte /* all bytes processed */
54 addiu $t3, $t3, 1
56 wait:
57 sdbbp
59 .end main