Skip to content

cmd/asm: wrong implement vmov/vld on arm64 #24400

Closed
@mengzhuo

Description

@mengzhuo

What version of Go are you using (go version)?

go 1.10

Does this issue reproduce with the latest release?

yes

What did you do?

Try to compile this code

#include "textflag.h"

TEXT ·asm(SB),NOSPLIT,$0-0
    VMOV        R1, V30.S[1]
    VMOV        R1, V30.S[0]
    VLD1.P    8(R0), V2.D[1]
    VLD1      (R0), V2.B[14]

What did you expect to see?

All instructions compiled.

According to "as" these instructions should be (little endian

   1 0000 3E1C0C4E      mov    v30.s[1], w1
   2 0004 3E1C044E      mov    v30.s[0], w1
   3 0008 0284DF0D      ld1 {v2.d}[0], [x0], #8
   4 000c 0218404D      ld1 {v2.b}[14], [x0]

What did you see instead?

  t_arm64.s:4           0xe6d40                 4e041c3e                VMOV R1, V30.S[0]
  t_arm64.s:5           0xe6d44                 4e041c3e                VMOV R1, V30.S[0]

and

asm: illegal combination: 00008 (/root/go/src/t/t_arm64.s:6)    VLD1.P  8(R0), V2.D[1] PSOREG_8 NONE ELEM, 3 7
asm: illegal combination: 00012 (/root/go/src/t/t_arm64.s:7)    VLD1    (R0), V2.B[14] ZOREG NONE ELEM, 3 7

System details

go version go1.10 linux/arm64
GOARCH="arm64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOHOSTARCH="arm64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_arm64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build937154189=/tmp/go-build -gno-record-gcc-switches"
GOROOT/bin/go version: go version go1.10 linux/arm64
GOROOT/bin/go tool compile -V: compile version go1.10
uname -sr: Linux 4.4.49-s5p6818
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.4 LTS
Release:        16.04
Codename:       xenial
/lib/aarch64-linux-gnu/libc.so.6: GNU C Library (Ubuntu GLIBC 2.23-0ubuntu10) stable release version 2.23, by Roland McGrath et al.
gdb --version: GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions