...

Text file src/crypto/internal/fips140/subtle/xor_mipsx.s

Documentation: crypto/internal/fips140/subtle

     1// Copyright 2025 The Go Authors. All rights reserved.
     2// Use of this source code is governed by a BSD-style
     3// license that can be found in the LICENSE file.
     4
     5//go:build (mips || mipsle) && !purego
     6
     7#include "textflag.h"
     8
     9// func xorBytes(dst, a, b *byte, n int)
    10TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0
    11	MOVW	dst+0(FP), R1
    12	MOVW	a+4(FP), R2
    13	MOVW	b+8(FP), R3
    14	MOVW	n+12(FP), R4
    15
    16	SGTU	$64, R4, R5 // R5 = 1 if (64 > R4)
    17	BNE	R5, xor_32_check
    18xor_64:
    19	MOVW	(R2), R6
    20	MOVW	4(R2), R7
    21	MOVW	8(R2), R8
    22	MOVW	12(R2), R9
    23	MOVW	(R3), R10
    24	MOVW	4(R3), R11
    25	MOVW	8(R3), R12
    26	MOVW	12(R3), R13
    27	XOR	R6, R10
    28	XOR	R7, R11
    29	XOR	R8, R12
    30	XOR	R9, R13
    31	MOVW	R10, (R1)
    32	MOVW	R11, 4(R1)
    33	MOVW	R12, 8(R1)
    34	MOVW	R13, 12(R1)
    35	MOVW	16(R2), R6
    36	MOVW	20(R2), R7
    37	MOVW	24(R2), R8
    38	MOVW	28(R2), R9
    39	MOVW	16(R3), R10
    40	MOVW	20(R3), R11
    41	MOVW	24(R3), R12
    42	MOVW	28(R3), R13
    43	XOR	R6, R10
    44	XOR	R7, R11
    45	XOR	R8, R12
    46	XOR	R9, R13
    47	MOVW	R10, 16(R1)
    48	MOVW	R11, 20(R1)
    49	MOVW	R12, 24(R1)
    50	MOVW	R13, 28(R1)
    51	MOVW	32(R2), R6
    52	MOVW	36(R2), R7
    53	MOVW	40(R2), R8
    54	MOVW	44(R2), R9
    55	MOVW	32(R3), R10
    56	MOVW	36(R3), R11
    57	MOVW	40(R3), R12
    58	MOVW	44(R3), R13
    59	XOR	R6, R10
    60	XOR	R7, R11
    61	XOR	R8, R12
    62	XOR	R9, R13
    63	MOVW	R10, 32(R1)
    64	MOVW	R11, 36(R1)
    65	MOVW	R12, 40(R1)
    66	MOVW	R13, 44(R1)
    67	MOVW	48(R2), R6
    68	MOVW	52(R2), R7
    69	MOVW	56(R2), R8
    70	MOVW	60(R2), R9
    71	MOVW	48(R3), R10
    72	MOVW	52(R3), R11
    73	MOVW	56(R3), R12
    74	MOVW	60(R3), R13
    75	XOR	R6, R10
    76	XOR	R7, R11
    77	XOR	R8, R12
    78	XOR	R9, R13
    79	MOVW	R10, 48(R1)
    80	MOVW	R11, 52(R1)
    81	MOVW	R12, 56(R1)
    82	MOVW	R13, 60(R1)
    83	ADD	$64, R2
    84	ADD	$64, R3
    85	ADD	$64, R1
    86	SUB	$64, R4
    87	SGTU	$64, R4, R5
    88	BEQ	R0, R5, xor_64
    89	BEQ	R0, R4, end
    90
    91xor_32_check:
    92	SGTU	$32, R4, R5
    93	BNE	R5, xor_16_check
    94xor_32:
    95	MOVW	(R2), R6
    96	MOVW	4(R2), R7
    97	MOVW	8(R2), R8
    98	MOVW	12(R2), R9
    99	MOVW	(R3), R10
   100	MOVW	4(R3), R11
   101	MOVW	8(R3), R12
   102	MOVW	12(R3), R13
   103	XOR	R6, R10
   104	XOR	R7, R11
   105	XOR	R8, R12
   106	XOR	R9, R13
   107	MOVW	R10, (R1)
   108	MOVW	R11, 4(R1)
   109	MOVW	R12, 8(R1)
   110	MOVW	R13, 12(R1)
   111	MOVW	16(R2), R6
   112	MOVW	20(R2), R7
   113	MOVW	24(R2), R8
   114	MOVW	28(R2), R9
   115	MOVW	16(R3), R10
   116	MOVW	20(R3), R11
   117	MOVW	24(R3), R12
   118	MOVW	28(R3), R13
   119	XOR	R6, R10
   120	XOR	R7, R11
   121	XOR	R8, R12
   122	XOR	R9, R13
   123	MOVW	R10, 16(R1)
   124	MOVW	R11, 20(R1)
   125	MOVW	R12, 24(R1)
   126	MOVW	R13, 28(R1)
   127	ADD	$32, R2
   128	ADD	$32, R3
   129	ADD	$32, R1
   130	SUB	$32, R4
   131	BEQ	R0, R4, end
   132
   133xor_16_check:
   134	SGTU	$16, R4, R5
   135	BNE	R5, xor_8_check
   136xor_16:
   137	MOVW	(R2), R6
   138	MOVW	4(R2), R7
   139	MOVW	8(R2), R8
   140	MOVW	12(R2), R9
   141	MOVW	(R3), R10
   142	MOVW	4(R3), R11
   143	MOVW	8(R3), R12
   144	MOVW	12(R3), R13
   145	XOR	R6, R10
   146	XOR	R7, R11
   147	XOR	R8, R12
   148	XOR	R9, R13
   149	MOVW	R10, (R1)
   150	MOVW	R11, 4(R1)
   151	MOVW	R12, 8(R1)
   152	MOVW	R13, 12(R1)
   153	ADD	$16, R2
   154	ADD	$16, R3
   155	ADD	$16, R1
   156	SUB	$16, R4
   157	BEQ	R0, R4, end
   158
   159xor_8_check:
   160	SGTU	$8, R4, R5
   161	BNE	R5, xor_4_check
   162xor_8:
   163	MOVW	(R2), R6
   164	MOVW	4(R2), R7
   165	MOVW	(R3), R8
   166	MOVW	4(R3), R9
   167	XOR	R6, R8
   168	XOR	R7, R9
   169	MOVW	R8, (R1)
   170	MOVW	R9, 4(R1)
   171	ADD	$8, R1
   172	ADD	$8, R2
   173	ADD	$8, R3
   174	SUB	$8, R4
   175	BEQ	R0, R4, end
   176
   177xor_4_check:
   178	SGTU	$4, R4, R5
   179	BNE	R5, xor_2_check
   180xor_4:
   181	MOVW	(R2), R6
   182	MOVW	(R3), R7
   183	XOR	R6, R7
   184	MOVW	R7, (R1)
   185	ADD	$4, R2
   186	ADD	$4, R3
   187	ADD	$4, R1
   188	SUB	$4, R4
   189	BEQ	R0, R4, end
   190
   191xor_2_check:
   192	SGTU	$2, R4, R5
   193	BNE	R5, xor_1
   194xor_2:
   195	MOVH	(R2), R6
   196	MOVH	(R3), R7
   197	XOR	R6, R7
   198	MOVH	R7, (R1)
   199	ADD	$2, R2
   200	ADD	$2, R3
   201	ADD	$2, R1
   202	SUB	$2, R4
   203	BEQ	R0, R4, end
   204
   205xor_1:
   206	MOVB	(R2), R6
   207	MOVB	(R3), R7
   208	XOR	R6, R7
   209	MOVB	R7, (R1)
   210
   211end:
   212	RET

View as plain text