a geicko-2 based round robin ranking system designed to test c++ battleship submissions battleship.dunkirk.sh
at main 2.4 kB view raw
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 gc && !purego 6 7// func update(state *macState, msg []byte) 8TEXT ·update(SB), $0-32 9 MOVV state+0(FP), R4 10 MOVV msg_base+8(FP), R5 11 MOVV msg_len+16(FP), R6 12 13 MOVV $0x10, R7 14 15 MOVV (R4), R8 // h0 16 MOVV 8(R4), R9 // h1 17 MOVV 16(R4), R10 // h2 18 MOVV 24(R4), R11 // r0 19 MOVV 32(R4), R12 // r1 20 21 BLT R6, R7, bytes_between_0_and_15 22 23loop: 24 MOVV (R5), R14 // msg[0:8] 25 MOVV 8(R5), R16 // msg[8:16] 26 ADDV R14, R8, R8 // h0 (x1 + y1 = z1', if z1' < x1 then z1' overflow) 27 ADDV R16, R9, R27 28 SGTU R14, R8, R24 // h0.carry 29 SGTU R9, R27, R28 30 ADDV R27, R24, R9 // h1 31 SGTU R27, R9, R24 32 OR R24, R28, R24 // h1.carry 33 ADDV $0x01, R24, R24 34 ADDV R10, R24, R10 // h2 35 36 ADDV $16, R5, R5 // msg = msg[16:] 37 38multiply: 39 MULV R8, R11, R14 // h0r0.lo 40 MULHVU R8, R11, R15 // h0r0.hi 41 MULV R9, R11, R13 // h1r0.lo 42 MULHVU R9, R11, R16 // h1r0.hi 43 ADDV R13, R15, R15 44 SGTU R13, R15, R24 45 ADDV R24, R16, R16 46 MULV R10, R11, R25 47 ADDV R16, R25, R25 48 MULV R8, R12, R13 // h0r1.lo 49 MULHVU R8, R12, R16 // h0r1.hi 50 ADDV R13, R15, R15 51 SGTU R13, R15, R24 52 ADDV R24, R16, R16 53 MOVV R16, R8 54 MULV R10, R12, R26 // h2r1 55 MULV R9, R12, R13 // h1r1.lo 56 MULHVU R9, R12, R16 // h1r1.hi 57 ADDV R13, R25, R25 58 ADDV R16, R26, R27 59 SGTU R13, R25, R24 60 ADDV R27, R24, R26 61 ADDV R8, R25, R25 62 SGTU R8, R25, R24 63 ADDV R24, R26, R26 64 AND $3, R25, R10 65 AND $-4, R25, R17 66 ADDV R17, R14, R8 67 ADDV R26, R15, R27 68 SGTU R17, R8, R24 69 SGTU R26, R27, R28 70 ADDV R27, R24, R9 71 SGTU R27, R9, R24 72 OR R24, R28, R24 73 ADDV R24, R10, R10 74 SLLV $62, R26, R27 75 SRLV $2, R25, R28 76 SRLV $2, R26, R26 77 OR R27, R28, R25 78 ADDV R25, R8, R8 79 ADDV R26, R9, R27 80 SGTU R25, R8, R24 81 SGTU R26, R27, R28 82 ADDV R27, R24, R9 83 SGTU R27, R9, R24 84 OR R24, R28, R24 85 ADDV R24, R10, R10 86 87 SUBV $16, R6, R6 88 BGE R6, R7, loop 89 90bytes_between_0_and_15: 91 BEQ R6, R0, done 92 MOVV $1, R14 93 XOR R15, R15 94 ADDV R6, R5, R5 95 96flush_buffer: 97 MOVBU -1(R5), R25 98 SRLV $56, R14, R24 99 SLLV $8, R15, R28 100 SLLV $8, R14, R14 101 OR R24, R28, R15 102 XOR R25, R14, R14 103 SUBV $1, R6, R6 104 SUBV $1, R5, R5 105 BNE R6, R0, flush_buffer 106 107 ADDV R14, R8, R8 108 SGTU R14, R8, R24 109 ADDV R15, R9, R27 110 SGTU R15, R27, R28 111 ADDV R27, R24, R9 112 SGTU R27, R9, R24 113 OR R24, R28, R24 114 ADDV R10, R24, R10 115 116 MOVV $16, R6 117 JMP multiply 118 119done: 120 MOVV R8, (R4) 121 MOVV R9, 8(R4) 122 MOVV R10, 16(R4) 123 RET