Index: llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td =================================================================== --- llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td +++ llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td @@ -480,76 +480,40 @@ def BranchTarget26Operand : BranchTarget<26>; def PCRelLabel19Operand : PCRelLabel<19>; -def MovZSymbolG3AsmOperand : AsmOperandClass { - let Name = "MovZSymbolG3"; +def MovWSymbolG3AsmOperand : AsmOperandClass { + let Name = "MovWSymbolG3"; let RenderMethod = "addImmOperands"; } -def movz_symbol_g3 : Operand { - let ParserMatchClass = MovZSymbolG3AsmOperand; +def movw_symbol_g3 : Operand { + let ParserMatchClass = MovWSymbolG3AsmOperand; } -def MovZSymbolG2AsmOperand : AsmOperandClass { - let Name = "MovZSymbolG2"; +def MovWSymbolG2AsmOperand : AsmOperandClass { + let Name = "MovWSymbolG2"; let RenderMethod = "addImmOperands"; } -def movz_symbol_g2 : Operand { - let ParserMatchClass = MovZSymbolG2AsmOperand; +def movw_symbol_g2 : Operand { + let ParserMatchClass = MovWSymbolG2AsmOperand; } -def MovZSymbolG1AsmOperand : AsmOperandClass { - let Name = "MovZSymbolG1"; +def MovWSymbolG1AsmOperand : AsmOperandClass { + let Name = "MovWSymbolG1"; let RenderMethod = "addImmOperands"; } -def movz_symbol_g1 : Operand { - let ParserMatchClass = MovZSymbolG1AsmOperand; +def movw_symbol_g1 : Operand { + let ParserMatchClass = MovWSymbolG1AsmOperand; } -def MovZSymbolG0AsmOperand : AsmOperandClass { - let Name = "MovZSymbolG0"; +def MovWSymbolG0AsmOperand : AsmOperandClass { + let Name = "MovWSymbolG0"; let RenderMethod = "addImmOperands"; } -def movz_symbol_g0 : Operand { - let ParserMatchClass = MovZSymbolG0AsmOperand; -} - -def MovKSymbolG3AsmOperand : AsmOperandClass { - let Name = "MovKSymbolG3"; - let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g3 : Operand { - let ParserMatchClass = MovKSymbolG3AsmOperand; -} - -def MovKSymbolG2AsmOperand : AsmOperandClass { - let Name = "MovKSymbolG2"; - let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g2 : Operand { - let ParserMatchClass = MovKSymbolG2AsmOperand; -} - -def MovKSymbolG1AsmOperand : AsmOperandClass { - let Name = "MovKSymbolG1"; - let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g1 : Operand { - let ParserMatchClass = MovKSymbolG1AsmOperand; -} - -def MovKSymbolG0AsmOperand : AsmOperandClass { - let Name = "MovKSymbolG0"; - let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g0 : Operand { - let ParserMatchClass = MovKSymbolG0AsmOperand; +def movw_symbol_g0 : Operand { + let ParserMatchClass = MovWSymbolG0AsmOperand; } class fixedpoint_i32 Index: llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.td =================================================================== --- llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.td +++ llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.td @@ -823,29 +823,29 @@ def : InstAlias<"movz $dst, $imm", (MOVZXi GPR64:$dst, imm0_65535:$imm, 0)>; // Next, we have various ELF relocations with the ":XYZ_g0:sym" syntax. -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g3:$sym, 48)>; -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g2:$sym, 32)>; -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g0:$sym, 0)>; - -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g3:$sym, 48)>; -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g2:$sym, 32)>; -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g0:$sym, 0)>; - -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g3:$sym, 48), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g2:$sym, 32), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g1:$sym, 16), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g0:$sym, 0), 0>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g3:$sym, 48)>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g2:$sym, 32)>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g0:$sym, 0)>; + +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g3:$sym, 48)>; +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g2:$sym, 32)>; +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g0:$sym, 0)>; + +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g3:$sym, 48), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g2:$sym, 32), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g1:$sym, 16), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g0:$sym, 0), 0>; -def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movz_symbol_g0:$sym, 0)>; +def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movw_symbol_g0:$sym, 0)>; -def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movz_symbol_g0:$sym, 0)>; +def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movw_symbol_g0:$sym, 0)>; -def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movk_symbol_g1:$sym, 16), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movk_symbol_g0:$sym, 0), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movw_symbol_g1:$sym, 16), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movw_symbol_g0:$sym, 0), 0>; // Final group of aliases covers true "mov $Rd, $imm" cases. multiclass movw_mov_alias Index: llvm/trunk/test/MC/AArch64/basic-a64-diagnostics.s =================================================================== --- llvm/trunk/test/MC/AArch64/basic-a64-diagnostics.s +++ llvm/trunk/test/MC/AArch64/basic-a64-diagnostics.s @@ -3216,35 +3216,11 @@ // CHECK-ERROR: error: invalid operand for instruction // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #0 // CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g0:sym -// CHECK-ERROR-AARCH64-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk w3, #:abs_g0:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movz x3, #:abs_g0_nc:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movn x4, #:abs_g0_nc:sym -// CHECK-ERROR-NEXT: ^ movn x2, #:abs_g1:sym movk w3, #:abs_g1:sym movz x3, #:abs_g1_nc:sym movn x4, #:abs_g1_nc:sym -// CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g1:sym -// CHECK-ERROR-AARCH64-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk w3, #:abs_g1:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movz x3, #:abs_g1_nc:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movn x4, #:abs_g1_nc:sym -// CHECK-ERROR-NEXT: ^ movz w12, #:abs_g2:sym movn x12, #:abs_g2:sym @@ -3255,28 +3231,13 @@ // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] // CHECK-ERROR-NEXT: movz w12, #:abs_g2:sym // CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT: movn x12, #:abs_g2:sym -// CHECK-ERROR-AARCH64-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk x13, #:abs_g2:sym -// CHECK-ERROR-NEXT: ^ // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] // CHECK-ERROR-NEXT: movk w3, #:abs_g2_nc:sym // CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movz x13, #:abs_g2_nc:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movn x24, #:abs_g2_nc:sym -// CHECK-ERROR-NEXT: ^ movn x19, #:abs_g3:sym movz w20, #:abs_g3:sym movk w21, #:abs_g3:sym -// CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT: movn x19, #:abs_g3:sym -// CHECK-ERROR-AARCH64-NEXT: ^ // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] // CHECK-ERROR-NEXT: movz w20, #:abs_g3:sym // CHECK-ERROR-NEXT: ^ @@ -3286,21 +3247,9 @@ movk x19, #:abs_g0_s:sym movk w23, #:abs_g0_s:sym -// CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk x19, #:abs_g0_s:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk w23, #:abs_g0_s:sym -// CHECK-ERROR-NEXT: ^ movk x19, #:abs_g1_s:sym movk w23, #:abs_g1_s:sym -// CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk x19, #:abs_g1_s:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk w23, #:abs_g1_s:sym -// CHECK-ERROR-NEXT: ^ movz w2, #:abs_g2_s:sym movn w29, #:abs_g2_s:sym @@ -3313,9 +3262,6 @@ // CHECK-ERROR-NEXT: movn w29, #:abs_g2_s:sym // CHECK-ERROR-NEXT: ^ // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT: movk x19, #:abs_g2_s:sym -// CHECK-ERROR-NEXT: ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] // CHECK-ERROR-NEXT: movk w23, #:abs_g2_s:sym // CHECK-ERROR-NEXT: ^