However, the enum tree is not supported since they do not support them. But other than that, mysql and maria DB seem to both be supported.
43 lines
1.0 KiB
ArmAsm
43 lines
1.0 KiB
ArmAsm
// Copyright (c) 2020 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build arm64 && gc && !purego
|
|
|
|
#include "textflag.h"
|
|
|
|
// carryPropagate works exactly like carryPropagateGeneric and uses the
|
|
// same AND, ADD, and LSR+MADD instructions emitted by the compiler, but
|
|
// avoids loading R0-R4 twice and uses LDP and STP.
|
|
//
|
|
// See https://golang.org/issues/43145 for the main compiler issue.
|
|
//
|
|
// func carryPropagate(v *Element)
|
|
TEXT ·carryPropagate(SB),NOFRAME|NOSPLIT,$0-8
|
|
MOVD v+0(FP), R20
|
|
|
|
LDP 0(R20), (R0, R1)
|
|
LDP 16(R20), (R2, R3)
|
|
MOVD 32(R20), R4
|
|
|
|
AND $0x7ffffffffffff, R0, R10
|
|
AND $0x7ffffffffffff, R1, R11
|
|
AND $0x7ffffffffffff, R2, R12
|
|
AND $0x7ffffffffffff, R3, R13
|
|
AND $0x7ffffffffffff, R4, R14
|
|
|
|
ADD R0>>51, R11, R11
|
|
ADD R1>>51, R12, R12
|
|
ADD R2>>51, R13, R13
|
|
ADD R3>>51, R14, R14
|
|
// R4>>51 * 19 + R10 -> R10
|
|
LSR $51, R4, R21
|
|
MOVD $19, R22
|
|
MADD R22, R10, R21, R10
|
|
|
|
STP (R10, R11), 0(R20)
|
|
STP (R12, R13), 16(R20)
|
|
MOVD R14, 32(R20)
|
|
|
|
RET
|