mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
304b2da27b
Summary: Patch https://reviews.llvm.org/D44467 implements conversion of invalid vmov instructions into valid ones. It turned out that some valid instructions also get converted, for example vmov.i64 d2, #0xff00ff00ff00ff00 -> vmov.i16 d2, #0xff00 Such behavior is incorrect because according to the ARM ARM section F2.7.7 Modified immediate constants in T32 and A32 Advanced SIMD instructions, "On assembly, the data type must be matched in the table if possible." This patch fixes the isNEONmovReplicate check so that the above instruction is not modified any more. Reviewers: rengolin, olista01 Reviewed By: rengolin Subscribers: javed.absar, kristof.beyls, rogfer01, llvm-commits Differential Revision: https://reviews.llvm.org/D44678 llvm-svn: 329158
107 lines
5.0 KiB
ArmAsm
107 lines
5.0 KiB
ArmAsm
@ 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]
|
|
|
|
vmov.i64 d2, #0xff00ff00ff00ff00
|
|
vmov.i64 q2, #0xff00ff00ff00ff00
|
|
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
|
|
|
|
@ CHECK: vmov.i64 d2, #0xff00ff00ff00ff00 @ encoding: [0x3a,0x2e,0x82,0xf3]
|
|
@ CHECK: vmov.i64 q2, #0xff00ff00ff00ff00 @ encoding: [0x7a,0x4e,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, #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]
|