From: Bradley Smith Date: Wed, 9 Apr 2014 14:43:31 +0000 (+0000) Subject: [ARM64] EXT and EXTR instructions on v8i8 and W regs respectively must have the top... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=5c73bde178098ed6c79e000dacf39fe6a3b2829b;p=oota-llvm.git [ARM64] EXT and EXTR instructions on v8i8 and W regs respectively must have the top bit of their immediate clear. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205881 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM64/ARM64InstrFormats.td b/lib/Target/ARM64/ARM64InstrFormats.td index f1981bf7499..aeb71a20fb5 100644 --- a/lib/Target/ARM64/ARM64InstrFormats.td +++ b/lib/Target/ARM64/ARM64InstrFormats.td @@ -1603,6 +1603,8 @@ multiclass ExtractImm { (ARM64Extr GPR32:$Rn, GPR32:$Rm, imm0_31:$imm))]> { let Inst{31} = 0; let Inst{22} = 0; + // imm<5> must be zero. + let imm{5} = 0; } def Xrri : BaseExtractImm { - def v8i8 : BaseSIMDBitwiseExtract<0, V64, v8i8, asm, ".8b">; + def v8i8 : BaseSIMDBitwiseExtract<0, V64, v8i8, asm, ".8b"> { + let imm{3} = 0; + } def v16i8 : BaseSIMDBitwiseExtract<1, V128, v16i8, asm, ".16b">; } diff --git a/test/MC/Disassembler/ARM64/basic-a64-undefined.txt b/test/MC/Disassembler/ARM64/basic-a64-undefined.txt index 21ff82ccccf..c2e3841bb94 100644 --- a/test/MC/Disassembler/ARM64/basic-a64-undefined.txt +++ b/test/MC/Disassembler/ARM64/basic-a64-undefined.txt @@ -20,4 +20,7 @@ # UBFM is undefined when s == 0 and imms<5> or immr<5> is 1. # RUN: echo "0x00 0x80 0x00 0x53" | llvm-mc -triple=arm64 -disassemble 2>&1 | FileCheck %s +# EXT on vectors of i8 must have imm<3> = 0. +# RUN: echo "0x00 0x40 0x00 0x2e" | llvm-mc -triple=arm64 -disassemble 2>&1 | FileCheck %s + # CHECK: invalid instruction encoding