]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/loong64: add MULW.D.W[U] instructions
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>
Tue, 18 Nov 2025 02:55:19 +0000 (10:55 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Thu, 20 Nov 2025 03:00:54 +0000 (19:00 -0800)
Go asm syntax:
MULWVW RK, RJ, RD
MULWVWU RK, RJ, RD

Equivalent platform assembler syntax:
mulw.d.w rd, rj, rk
mulw.d.wu rd, rj, rk

Change-Id: Ie46a21904a4c25d04200b0663f83072c38a76c6f
Reviewed-on: https://go-review.googlesource.com/c/go/+/721521
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Meidan Li <limeidan@loongson.cn>
Reviewed-by: Mark Freeman <markfreeman@google.com>
Reviewed-by: Keith Randall <khr@google.com>
src/cmd/asm/internal/asm/testdata/loong64enc1.s
src/cmd/internal/obj/loong64/a.out.go
src/cmd/internal/obj/loong64/anames.go
src/cmd/internal/obj/loong64/asm.go

index c820a0a5a10cc125d99d84aff6d13ef7c6458553..277396bf27c0ad99bb8ae1f9f3500dc7fd5f4f52 100644 (file)
@@ -212,6 +212,12 @@ lable2:
        SRLV    $32, R4, R5             // 85804500
        SRLV    $32, R4                 // 84804500
 
+       // MULW.D.W[U] instructions
+       MULWVW  R4, R5                  // a5101f00
+       MULWVW  R4, R5, R6              // a6101f00
+       MULWVWU R4, R5                  // a5901f00
+       MULWVWU R4, R5, R6              // a6901f00
+
        MASKEQZ R4, R5, R6              // a6101300
        MASKNEZ R4, R5, R6              // a6901300
 
index 73f145df1462b04a16843ebf4a26831cd81af80c..5b8bffc9f1ed1f14940653e0a2bd0e7e8bb3d5b1 100644 (file)
@@ -589,6 +589,10 @@ const (
        AORN
        AANDN
 
+       // 2.2.1.12
+       AMULWVW
+       AMULWVWU
+
        // 2.2.7. Atomic Memory Access Instructions
        AAMSWAPB
        AAMSWAPH
index ab85c52a21b2ac02f08c170205f06a2ea8d64b12..1749b43bf643a8444a10bbb2a0ef7a8bd9cd5a51 100644 (file)
@@ -131,6 +131,8 @@ var Anames = []string{
        "ALSLV",
        "ORN",
        "ANDN",
+       "MULWVW",
+       "MULWVWU",
        "AMSWAPB",
        "AMSWAPH",
        "AMSWAPW",
index 38b075d77e744a3ec63175550166c38ffa24efc1..b35e49a1b6ed855cc13c9d772dcaccab1b715f48 100644 (file)
@@ -1503,6 +1503,8 @@ func buildop(ctxt *obj.Link) {
                        opset(AREMU, r0)
                        opset(ADIV, r0)
                        opset(ADIVU, r0)
+                       opset(AMULWVW, r0)
+                       opset(AMULWVWU, r0)
 
                case AMULV:
                        opset(AMULVU, r0)
@@ -3230,6 +3232,10 @@ func (c *ctxt0) oprrr(a obj.As) uint32 {
                return 0x3c << 15 // mulh.d
        case AMULHVU:
                return 0x3d << 15 // mulhu.d
+       case AMULWVW:
+               return 0x3e << 15 // mulw.d.w
+       case AMULWVWU:
+               return 0x3f << 15 // mulw.d.wu
        case ADIV:
                return 0x40 << 15 // div.w
        case ADIVU: