summaryrefslogtreecommitdiffstats
path: root/src/crypto/isa-l/isa-l_crypto/rolling_hash/aarch64/rolling_hash2_run_until_unroll.S
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/crypto/isa-l/isa-l_crypto/rolling_hash/aarch64/rolling_hash2_run_until_unroll.S115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/crypto/isa-l/isa-l_crypto/rolling_hash/aarch64/rolling_hash2_run_until_unroll.S b/src/crypto/isa-l/isa-l_crypto/rolling_hash/aarch64/rolling_hash2_run_until_unroll.S
new file mode 100644
index 000000000..7ba04efbd
--- /dev/null
+++ b/src/crypto/isa-l/isa-l_crypto/rolling_hash/aarch64/rolling_hash2_run_until_unroll.S
@@ -0,0 +1,115 @@
+/**********************************************************************
+ Copyright(c) 2020 Arm Corporation All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the name of Arm Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
+ OWNER 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.
+**********************************************************************/
+ .arch armv8-a+crypto
+ .text
+ .align 2
+ .p2align 3,,7
+/*
+ uint64_t rolling_hash2_run_until_unroll(
+ uint32_t * idx, int max_idx, uint64_t * t1,
+ uint64_t * t2, uint8_t * b1, uint8_t * b2, uint64_t h,
+ uint64_t mask, uint64_t trigger)
+*/
+ idx_addr .req x0
+ max_idx .req w1 //signed int
+ t1_addr .req x2
+ t2_addr .req x3
+ b1_addr .req x4
+ b2_addr .req x5
+ h .req x6
+ mask .req x7
+ trigger .req x12
+
+ idx .req w8
+
+ dat1 .req x9
+ dat2 .req x10
+ wdat1 .req w9
+ wdat2 .req w10
+ tmp_loop .req w11
+
+ t1 .req x13
+ t2 .req x14
+
+.macro round off:req
+ ubfx t1,dat1,8*\off\(),8
+ ubfx t2,dat2,8*\off\(),8
+ ldr t1,[t1_addr,t1,lsl 3]
+ ldr t2,[t2_addr,t2,lsl 3]
+ eor t1,t2,t1
+ eor h,t1,h,ror 63
+ and t2,h,mask
+ cmp t2,trigger
+ beq exit_ret
+ add idx, idx,1
+.endm
+ .global rolling_hash2_run_until_unroll
+ .type rolling_hash2_run_until_unroll, %function
+rolling_hash2_run_until_unroll:
+ ldr trigger,[sp]
+ ldr idx,[idx_addr]
+ sub tmp_loop,max_idx,8
+ cmp idx,tmp_loop
+ bge unroll_loop_end
+unroll_loop:
+ ldr dat1,[b1_addr,idx,sxtw]
+ ldr dat2,[b2_addr,idx,sxtw]
+
+ round 0
+ round 1
+ round 2
+ round 3
+ round 4
+ round 5
+ round 6
+ round 7
+ cmp tmp_loop,idx
+ bgt unroll_loop
+unroll_loop_end:
+ cmp idx,max_idx
+ bge exit_ret
+loop:
+ ldrb wdat1,[b1_addr,idx,sxtw]
+ ldrb wdat2,[b2_addr,idx,sxtw]
+ ldr t1,[t1_addr,dat1,lsl 3]
+ ldr t2,[t2_addr,dat2,lsl 3]
+ eor t1,t2,t1
+ eor h,t1,h,ror 63
+ and t2,h,mask
+ cmp t2,trigger
+ beq exit_ret
+ add idx,idx,1
+ cmp max_idx,idx
+ bgt loop
+exit_ret:
+ str idx,[idx_addr]
+ mov x0,h
+ ret
+ .size rolling_hash2_run_until_unroll, .-rolling_hash2_run_until_unroll
+