[ARM] Convert more invalid NEON immediate loads
Summary:
Currently the LLVM MC assembler is able to convert e.g.
vmov.i32 d0, #0xabababab
(which is technically invalid) into a valid instruction
vmov.i8 d0, #0xab
this patch adds support for vmov.i64 and for cases with the resulting
load types other than i8, e.g.:
vmov.i32 d0, #0xab00ab00 ->
vmov.i16 d0, #0xab00
Reviewers: olista01, rengolin
Reviewed By: rengolin
Subscribers: rengolin, javed.absar, kristof.beyls, rogfer01, llvm-commits
Differential Revision: https://reviews.llvm.org/D44467
llvm-svn: 327709
2018-03-16 22:10:56 +08:00
|
|
|
@ PR18921, "vmov" part.
|
|
|
|
@ RUN: llvm-mc -triple=armv7-linux-gnueabi -show-encoding < %s | FileCheck %s
|
|
|
|
.text
|
|
|
|
vmov.i64 d2, #0xffffffffffffffff
|
|
|
|
vmov.i64 q2, #0xffffffffffffffff
|
|
|
|
vmov.i32 d2, #0xffffffff
|
|
|
|
vmov.i32 q2, #0xffffffff
|
|
|
|
vmov.i64 d2, #0xabababababababab
|
|
|
|
vmov.i64 q2, #0xabababababababab
|
|
|
|
vmov.i32 d2, #0xabababab
|
|
|
|
vmov.i32 q2, #0xabababab
|
|
|
|
vmov.i16 q2, #0xabab
|
|
|
|
vmov.i16 q2, #0xabab
|
|
|
|
|
|
|
|
@ CHECK: vmov.i64 d2, #0xffffffffffffffff @ encoding: [0x3f,0x2e,0x87,0xf3]
|
|
|
|
@ CHECK: vmov.i64 q2, #0xffffffffffffffff @ encoding: [0x7f,0x4e,0x87,0xf3]
|
|
|
|
@ CHECK: vmov.i8 d2, #0xff @ encoding: [0x1f,0x2e,0x87,0xf3]
|
|
|
|
@ CHECK: vmov.i8 q2, #0xff @ encoding: [0x5f,0x4e,0x87,0xf3]
|
|
|
|
@ CHECK: vmov.i8 d2, #0xab @ encoding: [0x1b,0x2e,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i8 q2, #0xab @ encoding: [0x5b,0x4e,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i8 d2, #0xab @ encoding: [0x1b,0x2e,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i8 q2, #0xab @ encoding: [0x5b,0x4e,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i8 q2, #0xab @ encoding: [0x5b,0x4e,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i8 q2, #0xab @ encoding: [0x5b,0x4e,0x82,0xf3]
|
|
|
|
|
2018-04-04 16:54:19 +08:00
|
|
|
vmov.i64 d2, #0xff00ff00ff00ff00
|
|
|
|
vmov.i64 q2, #0xff00ff00ff00ff00
|
[ARM] Convert more invalid NEON immediate loads
Summary:
Currently the LLVM MC assembler is able to convert e.g.
vmov.i32 d0, #0xabababab
(which is technically invalid) into a valid instruction
vmov.i8 d0, #0xab
this patch adds support for vmov.i64 and for cases with the resulting
load types other than i8, e.g.:
vmov.i32 d0, #0xab00ab00 ->
vmov.i16 d0, #0xab00
Reviewers: olista01, rengolin
Reviewed By: rengolin
Subscribers: rengolin, javed.absar, kristof.beyls, rogfer01, llvm-commits
Differential Revision: https://reviews.llvm.org/D44467
llvm-svn: 327709
2018-03-16 22:10:56 +08:00
|
|
|
vmov.i64 d2, #0x00a500a500a500a5
|
|
|
|
vmov.i64 q2, #0x00a500a500a500a5
|
|
|
|
vmov.i32 d2, #0x00a500a5
|
|
|
|
vmov.i32 q2, #0x00a500a5
|
|
|
|
vmov.i64 d2, #0xa500a500a500a500
|
|
|
|
vmov.i64 q2, #0xa500a500a500a500
|
|
|
|
vmov.i32 d2, #0xa500a500
|
|
|
|
vmov.i32 q2, #0xa500a500
|
|
|
|
|
2018-04-04 16:54:19 +08:00
|
|
|
@ CHECK: vmov.i64 d2, #0xff00ff00ff00ff00 @ encoding: [0x3a,0x2e,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i64 q2, #0xff00ff00ff00ff00 @ encoding: [0x7a,0x4e,0x82,0xf3]
|
[ARM] Convert more invalid NEON immediate loads
Summary:
Currently the LLVM MC assembler is able to convert e.g.
vmov.i32 d0, #0xabababab
(which is technically invalid) into a valid instruction
vmov.i8 d0, #0xab
this patch adds support for vmov.i64 and for cases with the resulting
load types other than i8, e.g.:
vmov.i32 d0, #0xab00ab00 ->
vmov.i16 d0, #0xab00
Reviewers: olista01, rengolin
Reviewed By: rengolin
Subscribers: rengolin, javed.absar, kristof.beyls, rogfer01, llvm-commits
Differential Revision: https://reviews.llvm.org/D44467
llvm-svn: 327709
2018-03-16 22:10:56 +08:00
|
|
|
@ CHECK: vmov.i16 d2, #0xa5 @ encoding: [0x15,0x28,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i16 q2, #0xa5 @ encoding: [0x55,0x48,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i16 d2, #0xa5 @ encoding: [0x15,0x28,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i16 q2, #0xa5 @ encoding: [0x55,0x48,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i16 d2, #0xa500 @ encoding: [0x15,0x2a,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i16 q2, #0xa500 @ encoding: [0x55,0x4a,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i16 d2, #0xa500 @ encoding: [0x15,0x2a,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i16 q2, #0xa500 @ encoding: [0x55,0x4a,0x82,0xf3]
|
|
|
|
|
|
|
|
vmov.i64 d2, #0x000000a5000000a5
|
|
|
|
vmov.i64 q2, #0x000000a5000000a5
|
|
|
|
vmov.i64 d2, #0x00a5ffff00a5ffff
|
|
|
|
vmov.i64 q2, #0x00a5ffff00a5ffff
|
|
|
|
|
|
|
|
@ CHECK: vmov.i32 d2, #0xa5 @ encoding: [0x15,0x20,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i32 q2, #0xa5 @ encoding: [0x55,0x40,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i32 d2, #0xa5ffff @ encoding: [0x15,0x2d,0x82,0xf3]
|
|
|
|
@ CHECK: vmov.i32 q2, #0xa5ffff @ encoding: [0x55,0x4d,0x82,0xf3]
|
|
|
|
|
|
|
|
vmvn.i64 d2, #0xffffffffffffffff
|
|
|
|
vmvn.i64 q2, #0xffffffffffffffff
|
|
|
|
vmvn.i32 d2, #0xffffffff
|
|
|
|
vmvn.i32 q2, #0xffffffff
|
|
|
|
vmvn.i64 d2, #0xabababababababab
|
|
|
|
vmvn.i64 q2, #0xabababababababab
|
|
|
|
vmvn.i32 d2, #0xabababab
|
|
|
|
vmvn.i32 q2, #0xabababab
|
|
|
|
vmvn.i16 d2, #0xabab
|
|
|
|
vmvn.i16 q2, #0xabab
|
|
|
|
|
|
|
|
@ CHECK: vmov.i8 d2, #0x0 @ encoding: [0x10,0x2e,0x80,0xf2]
|
|
|
|
@ CHECK: vmov.i8 q2, #0x0 @ encoding: [0x50,0x4e,0x80,0xf2]
|
|
|
|
@ CHECK: vmov.i8 d2, #0x0 @ encoding: [0x10,0x2e,0x80,0xf2]
|
|
|
|
@ CHECK: vmov.i8 q2, #0x0 @ encoding: [0x50,0x4e,0x80,0xf2]
|
|
|
|
@ CHECK: vmov.i8 d2, #0x54 @ encoding: [0x14,0x2e,0x85,0xf2]
|
|
|
|
@ CHECK: vmov.i8 q2, #0x54 @ encoding: [0x54,0x4e,0x85,0xf2]
|
|
|
|
@ CHECK: vmov.i8 d2, #0x54 @ encoding: [0x14,0x2e,0x85,0xf2]
|
|
|
|
@ CHECK: vmov.i8 q2, #0x54 @ encoding: [0x54,0x4e,0x85,0xf2]
|
|
|
|
@ CHECK: vmov.i8 d2, #0x54 @ encoding: [0x14,0x2e,0x85,0xf2]
|
|
|
|
@ CHECK: vmov.i8 q2, #0x54 @ encoding: [0x54,0x4e,0x85,0xf2]
|
|
|
|
|
|
|
|
vmvn.i64 d2, #0x00a500a500a500a5
|
|
|
|
vmvn.i64 q2, #0x00a500a500a500a5
|
|
|
|
vmvn.i32 d2, #0x00a500a5
|
|
|
|
vmvn.i32 q2, #0x00a500a5
|
|
|
|
vmvn.i64 d2, #0xa500a500a500a500
|
|
|
|
vmvn.i64 q2, #0xa500a500a500a500
|
|
|
|
vmvn.i32 d2, #0xa500a500
|
|
|
|
vmvn.i32 q2, #0xa500a500
|
|
|
|
|
|
|
|
@ CHECK: vmvn.i16 d2, #0xa5 @ encoding: [0x35,0x28,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i16 q2, #0xa5 @ encoding: [0x75,0x48,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i16 d2, #0xa5 @ encoding: [0x35,0x28,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i16 q2, #0xa5 @ encoding: [0x75,0x48,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i16 d2, #0xa500 @ encoding: [0x35,0x2a,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i16 q2, #0xa500 @ encoding: [0x75,0x4a,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i16 d2, #0xa500 @ encoding: [0x35,0x2a,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i16 q2, #0xa500 @ encoding: [0x75,0x4a,0x82,0xf3]
|
|
|
|
|
|
|
|
vmvn.i64 d2, #0x000000a5000000a5
|
|
|
|
vmvn.i64 q2, #0x000000a5000000a5
|
|
|
|
vmvn.i64 d2, #0x00a5ffff00a5ffff
|
|
|
|
vmvn.i64 q2, #0x00a5ffff00a5ffff
|
|
|
|
|
|
|
|
@ CHECK: vmvn.i32 d2, #0xa5 @ encoding: [0x35,0x20,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i32 q2, #0xa5 @ encoding: [0x75,0x40,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i32 d2, #0xa5ffff @ encoding: [0x35,0x2d,0x82,0xf3]
|
|
|
|
@ CHECK: vmvn.i32 q2, #0xa5ffff @ encoding: [0x75,0x4d,0x82,0xf3]
|