diff options
Diffstat (limited to 'src/cmd/internal/obj')
| -rw-r--r-- | src/cmd/internal/obj/arm64/a.out.go | 8 | ||||
| -rw-r--r-- | src/cmd/internal/obj/arm64/anames.go | 8 | ||||
| -rw-r--r-- | src/cmd/internal/obj/arm64/asm7.go | 40 |
3 files changed, 56 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/arm64/a.out.go b/src/cmd/internal/obj/arm64/a.out.go index 6ef3ac5105..f6ef1681f2 100644 --- a/src/cmd/internal/obj/arm64/a.out.go +++ b/src/cmd/internal/obj/arm64/a.out.go @@ -1116,6 +1116,14 @@ const ( AVSHADD AVSRHADD AVADDV + AVFMAXV + AVFMAXNMV + AVFMINV + AVFMINNMV + AVSMAXV + AVSMINV + AVUMAXV + AVUMINV AVAND AVBCAX AVBIF diff --git a/src/cmd/internal/obj/arm64/anames.go b/src/cmd/internal/obj/arm64/anames.go index a4de13ed1c..9592e9246c 100644 --- a/src/cmd/internal/obj/arm64/anames.go +++ b/src/cmd/internal/obj/arm64/anames.go @@ -472,6 +472,14 @@ var Anames = []string{ "VSHADD", "VSRHADD", "VADDV", + "VFMAXV", + "VFMAXNMV", + "VFMINV", + "VFMINNMV", + "VSMAXV", + "VSMINV", + "VUMAXV", + "VUMINV", "VAND", "VBCAX", "VBIF", diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index 00af21857c..aa1c76368a 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -3288,6 +3288,14 @@ func buildop(ctxt *obj.Link) { case AVADDV: oprangeset(AVUADDLV, t) + oprangeset(AVFMAXV, t) + oprangeset(AVFMAXNMV, t) + oprangeset(AVFMINV, t) + oprangeset(AVFMINNMV, t) + oprangeset(AVSMAXV, t) + oprangeset(AVSMINV, t) + oprangeset(AVUMAXV, t) + oprangeset(AVUMINV, t) case AVFMLA: oprangeset(AVFMLS, t) @@ -5312,6 +5320,14 @@ func (c *ctxt7) asmout(p *obj.Prog, out []uint32) (count int) { default: c.ctxt.Diag("invalid arrangement: %v\n", p) } + switch p.As { + // Floating-point reduction instructions only support .S4 arrangement and don't have a size field. + case AVFMAXV, AVFMINV, AVFMAXNMV, AVFMINNMV: + if af != ARNG_4S { + c.ctxt.Diag("invalid arrangement: %v\n", p) + } + size = 0 + } o1 = c.oprrr(p, p.As, p.To.Reg, p.From.Reg, obj.REG_NONE) o1 |= uint32(Q&1)<<30 | uint32(size&3)<<22 @@ -6800,6 +6816,30 @@ func (c *ctxt7) oprrr(p *obj.Prog, a obj.As, rd, rn, rm int16) uint32 { case AVADDV: op = ASIMDALL(0, 0, 0x1B) + case AVFMAXV: + op = ASIMDALL(1, 0, 0xF) + + case AVFMAXNMV: + op = ASIMDALL(1, 0, 0xC) + + case AVFMINV: + op = ASIMDALL(1, 2, 0xF) + + case AVFMINNMV: + op = ASIMDALL(1, 2, 0xC) + + case AVSMAXV: + op = ASIMDALL(0, 0, 0xA) + + case AVSMINV: + op = ASIMDALL(0, 0, 0x1A) + + case AVUMAXV: + op = ASIMDALL(1, 0, 0xA) + + case AVUMINV: + op = ASIMDALL(1, 0, 0x1A) + case AVUADDLV: op = ASIMDALL(1, 0, 0x03) |
