Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/aarch64/aarch64 Delete aarch64 cpu_in_cksum.S draft.
details: https://anonhg.NetBSD.org/src/rev/46c3ba1ea16c
branches: trunk
changeset: 744712:46c3ba1ea16c
user: riastradh <riastradh%NetBSD.org@localhost>
date: Tue Feb 11 03:12:06 2020 +0000
description:
Delete aarch64 cpu_in_cksum.S draft.
This isn't actually used in the kernel; it is only used to cause the
in_cksum tests to fail.
If you want to revive it and make it work, you can pull it out of the
attic.
diffstat:
sys/arch/aarch64/aarch64/cpu_in_cksum.S | 259 --------------------------------
1 files changed, 0 insertions(+), 259 deletions(-)
diffs (263 lines):
diff -r 3032b392f0c8 -r 46c3ba1ea16c sys/arch/aarch64/aarch64/cpu_in_cksum.S
--- a/sys/arch/aarch64/aarch64/cpu_in_cksum.S Tue Feb 11 03:11:42 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,259 +0,0 @@
-/* $NetBSD: cpu_in_cksum.S,v 1.1 2014/08/10 05:47:37 matt Exp $ */
-
-/*-
- * Copyright (c) 2014 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Matt Thomas of 3am Software Foundry.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <aarch64/asm.h>
-#include "assym.h"
-
-RCSID("$NetBSD: cpu_in_cksum.S,v 1.1 2014/08/10 05:47:37 matt Exp $")
-/*
- * int cpu_in_cksum(struct mbuf *m, int len, int off, uint32_t initial_sum)
- *
- * Entry:
- * r0 m
- * r1 len
- * r2 off
- * r3 initial_sum
- *
- * Function wide register usage
- * r 8accumulated sum
- * r9 remaining length to parse
- * ip pointer to next mbuf
- */
-/* LINTSTUB: Func: int cpu_in_cksum(struct mbuf *, int, int, uint32_t) */
-ENTRY(cpu_in_cksum)
- mov x13, #0
- mov x14, x0
- mov x15, x1
- mov x16, x3
- mov x17, x30
-
- ldr w1, [x14, #M_LEN]
- sub x7, x1, x2
- cmp x7, x16
- b.le .Lsingle_mbuf
-
-.Lskip_offset:
- cmp x2, x1
- b.lt .Lnonzero_offset
- sub x2, x2, x1
- ldr x14, [x14, #M_NEXT]
- cbnz x2, .Lskip_offset
- ldr w1, [x14, #M_LEN]
-
-.Lnonzero_offset:
- ldr x0, [x14, #M_DATA]
- add x0, x0, x2
- sub x1, x1, x2
-
-.Lget_cksum:
- eor x13, x13, x0 // was start not halfword aligned?
- bfi x13, x1, #1, #1 // remember if length was odd
- sub x15, x15, x1 // subtract length
-
- bl cpu_in_cksum_range
- tst x13, #1
- lsl x12, x0, #8
- csel x0, x0, x12, eq
- add x16, x16, x0
- cbz x15, .Lfinalize // nothing left, finalize
- eor x13, x13, x13, lsr #1 // merge length into misaligned
-.Lnext_mbuf:
- ldr x14, [x14, #M_NEXT]
- ldr w1, [x14, #M_LEN]
- cbz x1, .Lnext_mbuf
- cmp x1, x15
- csel x1, x1, x15, lt
- ldr x0, [x14, #M_DATA]
- b .Lget_cksum
-
-.Lsingle_mbuf:
- ldr x0, [x14, #M_DATA]
- add x0, x0, x2
- and x13, x0, #1
- cmp x15, #20
- b.eq .Ljust_ipv4_hdr
- mov x1, x15
- bl cpu_in_cksum
- tst x13, #1
- lsl x12, x0, #8
- csel x0, x0, x12, eq
- add x16, x16, x0
- b .Lfinalize
-
-.Ljust_ipv4_hdr:
- tbz x0, #2, 2f
- ldr w6, [x0], #4
- ldp x4, x5, [x0]
- b .Lipv4_hdr_add
-2: ldp x4, x5, [x0]
- ldr w6, [x0, #16]
-.Lipv4_hdr_add:
- adds w16, w16, w6
- adcs x16, x16, x4
- adcs x16, x16, x5
- adcs x16, x16, xzr
-
-.Lfinalize:
- /* we have a 64-bit (no carry) result */
- lsr x1, x16, #32
- adds w0, w16, w1
- /* we reduced that to a 33-bit result */
- lsr w1, w0, #16
- uxth w0, w0
- add w0, w0, w1
- /* now a 17-bit result (0 .. 0x1fffe) */
- add w0, w0, w0, lsr #16
- /* now a 16-bit result (0 .. 0xffff) */
- mvn w0, w0 // invert
- uxth w0, w0 // mask to a halfword
- ret x17
-END(cpu_in_cksum)
-
-/*
- * X0 = ptr
- * X1 = length
- * returns
- * x0 = 32-bit checksum
- * clobbers:
- * x0-x9
- */
-ENTRY(cpu_in_cksum_range)
- mov x6, x0
- mov x7, x1
- mov x10, #0
-
- mov x0, #0
- msr nzcv, xzr // clear carry
- lsr x8, x7, #4 // get qword count
- lsr x9, x8, #3
- cbz x8, .Llast_subqword // no qwords, deal with the remainder
-
- /*
- * We hope for alignment but if it's a small number of qwords
- * don't worry about.
- */
- cbz x9, .Lqword_loop
-
- /*
- * Since we are aligning, we have do adjust the length to remove
- * amount of data needed to align. Then we need recalculate the
- * qword count.
- */
- neg x9, x6 // get negative of address
- and x9, x6, #15 // mask off upper bits
- sub x7, x7, x9 // shrink length.
- lsr x8, x7, #4 // get qword count
- lsr x9, x8, #3
-
- tbz x6, #0, .Lhword_aligned
- ldrb w4, [x6], #1 // zero extending load
- add x0, x0, x4, lsr #8 // carry not possible
- mov x10, #8 // final rotate
-.Lhword_aligned:
- tbz x6, #1, .Lword_aligned
- ldrh w4, [x6], #2 // zero extending load
- add x0, x0, x4 // carry not possible
-.Lword_aligned:
- tbz x6, #2, .Ldword_aligned
- ldr w4, [x6], #4 // zero extending load
- add x0, x0, x4 // carry not possible
-.Ldword_aligned:
- tbz x6, #3, .Lqword_aligned
- ldr x4, [x6], #8
- adds x0, x0, x4
-.Lqword_aligned:
- cbz x9, .Lqword_loop
- /*
- * This loop does it 128 bytes (8 * 16) at a time.
- */
-.Lbig_loop:
- ldp x2, x3, [x6], #16 // 1
- adcs x0, x0, x2
- adcs x0, x0, x3
- ldp x4, x5, [x6], #16 // 2
- adcs x0, x0, x4
- adcs x0, x0, x5
- ldp x2, x3, [x6], #16 // 3
- adcs x0, x0, x2
- adcs x0, x0, x3
- ldp x4, x5, [x6], #16 // 4
- adcs x0, x0, x4
- adcs x0, x0, x5
- ldp x2, x3, [x6], #16 // 5
- adcs x0, x0, x2
- adcs x0, x0, x3
- ldp x4, x5, [x6], #16 // 6
- adcs x0, x0, x4
- adcs x0, x0, x5
- ldp x2, x3, [x6], #16 // 7
- adcs x0, x0, x2
- adcs x0, x0, x3
- ldp x4, x5, [x6], #16 // 8
- adcs x0, x0, x4
- adcs x0, x0, x5
- sub x9, x9, #1
- cbnz x9, .Lbig_loop
-.Lqword_loop:
- ldp x4, x5, [x6], #16
- adcs x0, x0, x4
- adcs x0, x0, x5
- sub x8, x8, #1
- cbnz x8, .Lqword_loop
- and x7, x7, #15 // keep leftover amount.
- cbz x7, .Lcollapse
-
-.Llast_subqword:
- tbz x7, #3, .Llast_subdword
- ldr x4, [x6], #8
- adcs x0, x0, x4
-.Llast_subdword:
- tbz x7, #2, .Llast_subword
- ldr w4, [x6], #4
- adcs x0, x0, x4
-.Llast_subword:
- tbz x7, #1, .Llast_subhalfword
- ldrh w4, [x6], #2
- adcs x0, x0, x4
-.Llast_subhalfword:
- tbz x7, #0, .Lcollapse
- ldrb w4, [x6]
- adcs x0, x0, x4
-.Lcollapse:
- ror x0, x0, x10
- lsr x1, x0, #32
- adcs w0, w0, w1
- /*
- * We now have a number from 0 to 0xfffffffe + carry.
- * add zero with carry and we have a 32-bit number.
- */
- adcs w0, w0, wzr
- ret
-END(cpu_in_cksum_range)
Home |
Main Index |
Thread Index |
Old Index