]> Cypherpunks repositories - gostls13.git/commitdiff
go, math, os, reflect: support standard library for loong64
authorXiaodong Liu <liuxiaodong@loongson.cn>
Thu, 19 May 2022 12:01:10 +0000 (20:01 +0800)
committerGopher Robot <gobot@golang.org>
Fri, 20 May 2022 15:12:52 +0000 (15:12 +0000)
Contributors to the loong64 port are:
  Weining Lu <luweining@loongson.cn>
  Lei Wang <wanglei@loongson.cn>
  Lingqin Gong <gonglingqin@loongson.cn>
  Xiaolin Zhao <zhaoxiaolin@loongson.cn>
  Meidan Li <limeidan@loongson.cn>
  Xiaojuan Zhai <zhaixiaojuan@loongson.cn>
  Qiyuan Pu <puqiyuan@loongson.cn>
  Guoqi Chen <chenguoqi@loongson.cn>

This port has been updated to Go 1.15.6:
  https://github.com/loongson/go

Updates #46229

Change-Id: I2ad9ed01fc913b90e75023ac0fa70de87a9f5de1
Reviewed-on: https://go-review.googlesource.com/c/go/+/342324
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/go/types/gccgosizes.go
src/math/big/arith_loong64.s [new file with mode: 0644]
src/os/endian_little.go
src/reflect/asm_loong64.s [new file with mode: 0644]

index d5c92c6d1ddb58d9a60191de6aeb2ac3420b1301..9d077cc5a657b74da6216c860d2efe4df666c1ed 100644 (file)
@@ -17,6 +17,7 @@ var gccgoArchSizes = map[string]*StdSizes{
        "arm64":       {8, 8},
        "arm64be":     {8, 8},
        "ia64":        {8, 8},
+       "loong64":     {8, 8},
        "m68k":        {4, 2},
        "mips":        {4, 8},
        "mipsle":      {4, 8},
diff --git a/src/math/big/arith_loong64.s b/src/math/big/arith_loong64.s
new file mode 100644 (file)
index 0000000..0ae3031
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2022 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.
+
+// +build !math_big_pure_go,loong64
+
+#include "textflag.h"
+
+// This file provides fast assembly versions for the elementary
+// arithmetic operations on vectors implemented in arith.go.
+
+TEXT ·addVV(SB),NOSPLIT,$0
+       JMP ·addVV_g(SB)
+
+TEXT ·subVV(SB),NOSPLIT,$0
+       JMP ·subVV_g(SB)
+
+TEXT ·addVW(SB),NOSPLIT,$0
+       JMP ·addVW_g(SB)
+
+TEXT ·subVW(SB),NOSPLIT,$0
+       JMP ·subVW_g(SB)
+
+TEXT ·shlVU(SB),NOSPLIT,$0
+       JMP ·shlVU_g(SB)
+
+TEXT ·shrVU(SB),NOSPLIT,$0
+       JMP ·shrVU_g(SB)
+
+TEXT ·mulAddVWW(SB),NOSPLIT,$0
+       JMP ·mulAddVWW_g(SB)
+
+TEXT ·addMulVVW(SB),NOSPLIT,$0
+       JMP ·addMulVVW_g(SB)
index 10643a804e03b0d8014f9ebca02b4413ec577617..a7cf1cdda8e47e57e3d0ca8f10837dbf7467d354 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 //
-//go:build 386 || amd64 || arm || arm64 || ppc64le || mips64le || mipsle || riscv64 || wasm
+//go:build 386 || amd64 || arm || arm64 || loong64 || ppc64le || mips64le || mipsle || riscv64 || wasm
 
 package os
 
diff --git a/src/reflect/asm_loong64.s b/src/reflect/asm_loong64.s
new file mode 100644 (file)
index 0000000..341a6d5
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2022 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.
+
+#include "textflag.h"
+#include "funcdata.h"
+
+#define        REGCTXT R29
+
+// makeFuncStub is the code half of the function returned by MakeFunc.
+// See the comment on the declaration of makeFuncStub in makefunc.go
+// for more details.
+// No arg size here, runtime pulls arg map out of the func value.
+TEXT ·makeFuncStub(SB),(NOSPLIT|WRAPPER),$40
+       NO_LOCAL_POINTERS
+       MOVV    REGCTXT, 8(R3)
+       MOVV    $argframe+0(FP), R19
+       MOVV    R19, 16(R3)
+       MOVB    R0, 40(R3)
+       ADDV    $40, R3, R19
+       MOVV    R19, 24(R3)
+       MOVV    R0, 32(R3)
+       JAL     ·callReflect(SB)
+       RET
+
+// methodValueCall is the code half of the function returned by makeMethodValue.
+// See the comment on the declaration of methodValueCall in makefunc.go
+// for more details.
+// No arg size here; runtime pulls arg map out of the func value.
+TEXT ·methodValueCall(SB),(NOSPLIT|WRAPPER),$40
+       NO_LOCAL_POINTERS
+       MOVV    REGCTXT, 8(R3)
+       MOVV    $argframe+0(FP), R19
+       MOVV    R19, 16(R3)
+       MOVB    R0, 40(R3)
+       ADDV    $40, R3, R19
+       MOVV    R19, 24(R3)
+       MOVV    R0, 32(R3)
+       JAL     ·callMethod(SB)
+       RET