forked from OSchip/llvm-project
[AArch64][AsmParser] Remove 'x31' alias for 'sp/xzr' register.
Only the aliases 'xzr' and 'sp' exist for the physical register x31. The reason for wanting to remove the alias 'x31' is because it allows users to write invalid asm that is not accepted by the GNU assembler. Is there any objection to removing this alias? Or do we want to keep this for compatibility with existing code that uses w31/x31? Differential Revision: https://reviews.llvm.org/D90153
This commit is contained in:
parent
76a168bce0
commit
8b281bfaf3
|
@ -90,6 +90,15 @@ Changes to the ARM Backend
|
||||||
|
|
||||||
During this release ...
|
During this release ...
|
||||||
|
|
||||||
|
Changes to the AArch64 Backend
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
During this release ...
|
||||||
|
|
||||||
|
* The assembler no longer accepts ``w31`` and ``x31`` as aliases for ``wzr``
|
||||||
|
and ``xzr``, because the architecture manual explicitly states that no
|
||||||
|
registers with those names exist.
|
||||||
|
|
||||||
Changes to the MIPS Target
|
Changes to the MIPS Target
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
|
|
@ -2322,8 +2322,6 @@ unsigned AArch64AsmParser::matchRegisterNameAlias(StringRef Name,
|
||||||
if (auto RegNum = StringSwitch<unsigned>(Name.lower())
|
if (auto RegNum = StringSwitch<unsigned>(Name.lower())
|
||||||
.Case("fp", AArch64::FP)
|
.Case("fp", AArch64::FP)
|
||||||
.Case("lr", AArch64::LR)
|
.Case("lr", AArch64::LR)
|
||||||
.Case("x31", AArch64::XZR)
|
|
||||||
.Case("w31", AArch64::WZR)
|
|
||||||
.Default(0))
|
.Default(0))
|
||||||
return Kind == RegKind::Scalar ? RegNum : 0;
|
return Kind == RegKind::Scalar ? RegNum : 0;
|
||||||
|
|
||||||
|
|
|
@ -2443,30 +2443,38 @@
|
||||||
//// 32-bit addresses
|
//// 32-bit addresses
|
||||||
ldr w0, [w20]
|
ldr w0, [w20]
|
||||||
ldrsh x3, [wsp]
|
ldrsh x3, [wsp]
|
||||||
|
ldrb w0, [sp, x31]
|
||||||
// CHECK-ERROR: error: invalid operand for instruction
|
// CHECK-ERROR: error: invalid operand for instruction
|
||||||
// CHECK-ERROR-NEXT: ldr w0, [w20]
|
// CHECK-ERROR-NEXT: ldr w0, [w20]
|
||||||
// CHECK-ERROR-NEXT: ^
|
// CHECK-ERROR-NEXT: ^
|
||||||
// CHECK-ERROR-NEXT: error: invalid operand for instruction
|
// CHECK-ERROR-NEXT: error: invalid operand for instruction
|
||||||
// CHECK-ERROR-NEXT: ldrsh x3, [wsp]
|
// CHECK-ERROR-NEXT: ldrsh x3, [wsp]
|
||||||
// CHECK-ERROR-NEXT: ^
|
// CHECK-ERROR-NEXT: ^
|
||||||
|
// CHECK-ERROR-NEXT: error: index must be an integer in range [-256, 255].
|
||||||
|
// CHECK-ERROR-NEXT: ldrb w0, [sp, x31]
|
||||||
|
// CHECK-ERROR-NETX: ^
|
||||||
|
|
||||||
//// Store things
|
//// Store things
|
||||||
strb w0, [wsp]
|
strb w0, [wsp]
|
||||||
strh w31, [x23, #1]
|
strh w31, [x23, #1]
|
||||||
str x5, [x22, #12]
|
str x5, [x22, #12]
|
||||||
str w7, [x12, #16384]
|
str w7, [x12, #16384]
|
||||||
|
strb w0, [sp, x31]
|
||||||
// CHECK-ERROR: error: invalid operand for instruction
|
// CHECK-ERROR: error: invalid operand for instruction
|
||||||
// CHECK-ERROR-NEXT: strb w0, [wsp]
|
// CHECK-ERROR-NEXT: strb w0, [wsp]
|
||||||
// CHECK-ERROR-NEXT: ^
|
// CHECK-ERROR-NEXT: ^
|
||||||
// CHECK-ERROR-AARCH64: error: invalid operand for instruction
|
// CHECK-ERROR: error: invalid operand for instruction
|
||||||
// CHECK-ERROR-AARCH64-NEXT: strh w31, [x23, #1]
|
// CHECK-ERROR-NEXT: strh w31, [x23, #1]
|
||||||
// CHECK-ERROR-AARCH64-NEXT: ^
|
// CHECK-ERROR-NEXT: ^
|
||||||
// CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
|
// CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
|
||||||
// CHECK-ERROR-AARCH64-NEXT: str x5, [x22, #12]
|
// CHECK-ERROR-AARCH64-NEXT: str x5, [x22, #12]
|
||||||
// CHECK-ERROR-AARCH64-NEXT: ^
|
// CHECK-ERROR-AARCH64-NEXT: ^
|
||||||
// CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
|
// CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
|
||||||
// CHECK-ERROR-NEXT: str w7, [x12, #16384]
|
// CHECK-ERROR-NEXT: str w7, [x12, #16384]
|
||||||
// CHECK-ERROR-NEXT: ^
|
// CHECK-ERROR-NEXT: ^
|
||||||
|
// CHECK-ERROR-NEXT: error: index must be an integer in range [-256, 255].
|
||||||
|
// CHECK-ERROR-NEXT: strb w0, [sp, x31]
|
||||||
|
// CHECK-ERROR-NEXT: ^
|
||||||
|
|
||||||
//// Bad PRFMs
|
//// Bad PRFMs
|
||||||
prfm #-1, [sp]
|
prfm #-1, [sp]
|
||||||
|
|
|
@ -8,10 +8,10 @@ ldur x0, [sp, #8]
|
||||||
ldrb w0, [sp], #1
|
ldrb w0, [sp], #1
|
||||||
ldrsh w0, [sp, #2]!
|
ldrsh w0, [sp, #2]!
|
||||||
ldr x0, [sp, #8]
|
ldr x0, [sp, #8]
|
||||||
ldrb w0, [sp, x31]
|
ldrb w0, [sp, xzr]
|
||||||
ldrsh w0, [sp, x31, lsl #1]
|
ldrsh w0, [sp, xzr, lsl #1]
|
||||||
ldr w0, [sp, w31, sxtw]
|
ldr w0, [sp, wzr, sxtw]
|
||||||
ldr x0, [sp, w31, uxtw #3]
|
ldr x0, [sp, wzr, uxtw #3]
|
||||||
ldnp w0, w1, [sp, #8]
|
ldnp w0, w1, [sp, #8]
|
||||||
ldp x0, x1, [sp], #16
|
ldp x0, x1, [sp], #16
|
||||||
ldpsw x0, x1, [sp, #8]!
|
ldpsw x0, x1, [sp, #8]!
|
||||||
|
|
|
@ -7,10 +7,10 @@ stur x0, [sp, #8]
|
||||||
strb w0, [sp], #1
|
strb w0, [sp], #1
|
||||||
strh w0, [sp, #2]!
|
strh w0, [sp, #2]!
|
||||||
str x0, [sp, #8]
|
str x0, [sp, #8]
|
||||||
strb w0, [sp, x31]
|
strb w0, [sp, xzr]
|
||||||
strh w0, [sp, x31, lsl #1]
|
strh w0, [sp, xzr, lsl #1]
|
||||||
str w0, [sp, w31, sxtw]
|
str w0, [sp, wzr, sxtw]
|
||||||
str x0, [sp, w31, uxtw #3]
|
str x0, [sp, wzr, uxtw #3]
|
||||||
stnp w0, w1, [sp, #8]
|
stnp w0, w1, [sp, #8]
|
||||||
stp x0, x1, [sp], #16
|
stp x0, x1, [sp], #16
|
||||||
stp w0, w1, [sp, #8]!
|
stp w0, w1, [sp, #8]!
|
||||||
|
|
Loading…
Reference in New Issue