aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorMeng Zhuo <mzh@golangcn.org>2021-03-16 18:51:41 +0800
committerMeng Zhuo <mzh@golangcn.org>2021-03-16 14:31:05 +0000
commite31e84010e0989e1df4bd2c55d529497119bb345 (patch)
tree59dc67c8c530fa09d3f71bf9c335ec057b28d340 /src/cmd/internal/obj
parentbd0fc0b9c32e3697380a6484154accacdb928f97 (diff)
downloadgo-e31e84010e0989e1df4bd2c55d529497119bb345.tar.xz
cmd/asm: add rotr/drotr for mips64
This CL encodes: ROTR rd, rt, sa ROTRV rd, rt, rs => ROTR (SCON|REG), (REG,)? REG DROTR rd, rt, sa DROTR32 rd, rt, sa DROTRV rd, rt, rs => ROTRV (SCON|REG), (REG,)? REG Note: ROTRV will handle const over 32 Ref: The MIPS64® Instruction Set Reference Manual Revision 6.05 Change-Id: Ibe69f999b83eb43843d088cf1ac5a13c995269a5 Reviewed-on: https://go-review.googlesource.com/c/go/+/280114 Trust: Meng Zhuo <mzh@golangcn.org> Run-TryBot: Meng Zhuo <mzh@golangcn.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/mips/a.out.go2
-rw-r--r--src/cmd/internal/obj/mips/anames.go2
-rw-r--r--src/cmd/internal/obj/mips/asm0.go15
3 files changed, 18 insertions, 1 deletions
diff --git a/src/cmd/internal/obj/mips/a.out.go b/src/cmd/internal/obj/mips/a.out.go
index ddd048a17f..c6ce53a8da 100644
--- a/src/cmd/internal/obj/mips/a.out.go
+++ b/src/cmd/internal/obj/mips/a.out.go
@@ -390,6 +390,8 @@ const (
AREM
AREMU
ARFE
+ AROTR
+ AROTRV
ASC
ASCV
ASGT
diff --git a/src/cmd/internal/obj/mips/anames.go b/src/cmd/internal/obj/mips/anames.go
index 2a44e4ca70..ca2ad5ae26 100644
--- a/src/cmd/internal/obj/mips/anames.go
+++ b/src/cmd/internal/obj/mips/anames.go
@@ -78,6 +78,8 @@ var Anames = []string{
"REM",
"REMU",
"RFE",
+ "ROTR",
+ "ROTRV",
"SC",
"SCV",
"SGT",
diff --git a/src/cmd/internal/obj/mips/asm0.go b/src/cmd/internal/obj/mips/asm0.go
index fd29f9fa21..e475ffdc14 100644
--- a/src/cmd/internal/obj/mips/asm0.go
+++ b/src/cmd/internal/obj/mips/asm0.go
@@ -1022,10 +1022,12 @@ func buildop(ctxt *obj.Link) {
case ASLL:
opset(ASRL, r0)
opset(ASRA, r0)
+ opset(AROTR, r0)
case ASLLV:
opset(ASRAV, r0)
opset(ASRLV, r0)
+ opset(AROTRV, r0)
case ASUB:
opset(ASUBU, r0)
@@ -1732,12 +1734,16 @@ func (c *ctxt0) oprrr(a obj.As) uint32 {
return OP(0, 6)
case ASRA:
return OP(0, 7)
+ case AROTR:
+ return OP(8, 6)
case ASLLV:
return OP(2, 4)
case ASRLV:
return OP(2, 6)
case ASRAV:
return OP(2, 7)
+ case AROTRV:
+ return OP(10, 6)
case AADDV:
return OP(5, 4)
case AADDVU:
@@ -1916,6 +1922,8 @@ func (c *ctxt0) opirr(a obj.As) uint32 {
return OP(0, 2)
case ASRA:
return OP(0, 3)
+ case AROTR:
+ return OP(0, 2) | 1<<21
case AADDV:
return SP(3, 0)
case AADDVU:
@@ -2028,12 +2036,16 @@ func (c *ctxt0) opirr(a obj.As) uint32 {
return OP(7, 2)
case ASRAV:
return OP(7, 3)
+ case AROTRV:
+ return OP(7, 2) | 1<<21
case -ASLLV:
return OP(7, 4)
case -ASRLV:
return OP(7, 6)
case -ASRAV:
return OP(7, 7)
+ case -AROTRV:
+ return OP(7, 6) | 1<<21
case ATEQ:
return OP(6, 4)
@@ -2061,7 +2073,8 @@ func vshift(a obj.As) bool {
switch a {
case ASLLV,
ASRLV,
- ASRAV:
+ ASRAV,
+ AROTRV:
return true
}
return false