mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-24 08:24:33 +00:00
[mips] [IAS] Improve warning for using AT with .set noat.
Summary: Changed the warning message to show the current value of $at, similar to what clang does for typedef's, and renamed warnIfAssemblerTemporary to a more descriptive name. I also changed the type of variables which store registers from int to unsigned, updated the relevant test and tried to make the related comments clearer. Reviewers: dsanders Reviewed By: dsanders Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8479 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235881 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -436,8 +436,8 @@ public:
|
|||||||
// TODO: see how can we get this info.
|
// TODO: see how can we get this info.
|
||||||
bool abiUsesSoftFloat() const { return false; }
|
bool abiUsesSoftFloat() const { return false; }
|
||||||
|
|
||||||
/// Warn if RegNo is the current assembler temporary.
|
/// Warn if RegIndex is the same as the current AT.
|
||||||
void warnIfAssemblerTemporary(int RegNo, SMLoc Loc);
|
void warnIfRegIndexIsAT(unsigned RegIndex, SMLoc Loc);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -546,7 +546,7 @@ public:
|
|||||||
/// target.
|
/// target.
|
||||||
unsigned getGPR32Reg() const {
|
unsigned getGPR32Reg() const {
|
||||||
assert(isRegIdx() && (RegIdx.Kind & RegKind_GPR) && "Invalid access!");
|
assert(isRegIdx() && (RegIdx.Kind & RegKind_GPR) && "Invalid access!");
|
||||||
AsmParser.warnIfAssemblerTemporary(RegIdx.Index, StartLoc);
|
AsmParser.warnIfRegIndexIsAT(RegIdx.Index, StartLoc);
|
||||||
unsigned ClassID = Mips::GPR32RegClassID;
|
unsigned ClassID = Mips::GPR32RegClassID;
|
||||||
return RegIdx.RegInfo->getRegClass(ClassID).getRegister(RegIdx.Index);
|
return RegIdx.RegInfo->getRegClass(ClassID).getRegister(RegIdx.Index);
|
||||||
}
|
}
|
||||||
@ -2203,15 +2203,10 @@ bool MipsAsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
|||||||
llvm_unreachable("Implement any new match types added!");
|
llvm_unreachable("Implement any new match types added!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MipsAsmParser::warnIfAssemblerTemporary(int RegIndex, SMLoc Loc) {
|
void MipsAsmParser::warnIfRegIndexIsAT(unsigned RegIndex, SMLoc Loc) {
|
||||||
if ((RegIndex != 0) &&
|
if (RegIndex != 0 && AssemblerOptions.back()->getATRegIndex() == RegIndex)
|
||||||
((int)AssemblerOptions.back()->getATRegIndex() == RegIndex)) {
|
Warning(Loc, "used $at (currently $" + Twine(RegIndex) +
|
||||||
if (RegIndex == 1)
|
") without \".set noat\"");
|
||||||
Warning(Loc, "used $at without \".set noat\"");
|
|
||||||
else
|
|
||||||
Warning(Loc, Twine("used $") + Twine(RegIndex) + " with \".set at=$" +
|
|
||||||
Twine(RegIndex) + "\"");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1,32 +1,34 @@
|
|||||||
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32r2 \
|
# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32r2 \
|
||||||
# RUN: 2>%t1 | FileCheck %s
|
# RUN: 2>%t1 | FileCheck %s
|
||||||
# RUN: FileCheck -check-prefix=WARNINGS %s < %t1
|
# RUN: FileCheck -check-prefix=WARNINGS %s < %t1
|
||||||
# Check that the assembler can handle the documented syntax
|
|
||||||
# for ".set at" and set the correct value. The correct value for $at is always
|
# Check that the assembler can handle the documented syntax for ".set at" and
|
||||||
# $1 when written by the user.
|
# will set the correct value for $at.
|
||||||
|
# Note that writing $at is always the same as writing $1.
|
||||||
|
|
||||||
.text
|
.text
|
||||||
foo:
|
foo:
|
||||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||||
.set at=$1
|
.set at=$1
|
||||||
jr $at
|
jr $at
|
||||||
|
|
||||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||||
.set at=$1
|
.set at=$1
|
||||||
jr $1
|
jr $1
|
||||||
|
|
||||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||||
.set at=$at
|
.set at=$at
|
||||||
jr $at
|
jr $at
|
||||||
|
|
||||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $at without ".set noat"
|
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $1) without ".set noat"
|
||||||
.set at=$at
|
.set at=$at
|
||||||
jr $1
|
jr $1
|
||||||
# WARNINGS-NOT: warning: used $at without ".set noat"
|
|
||||||
|
|
||||||
|
# WARNINGS-NOT: warning: used $at (currently ${{[0-9]+}}) without ".set noat"
|
||||||
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
# CHECK: jr $1 # encoding: [0x08,0x00,0x20,0x00]
|
||||||
.set at=$2
|
.set at=$2
|
||||||
jr $at
|
jr $at
|
||||||
@ -41,12 +43,11 @@ foo:
|
|||||||
jr $at
|
jr $at
|
||||||
|
|
||||||
# CHECK: jr $16 # encoding: [0x08,0x00,0x00,0x02]
|
# CHECK: jr $16 # encoding: [0x08,0x00,0x00,0x02]
|
||||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $16 with ".set at=$16"
|
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $16) without ".set noat"
|
||||||
.set at=$16
|
.set at=$16
|
||||||
jr $s0
|
jr $s0
|
||||||
|
|
||||||
# CHECK: jr $16 # encoding: [0x08,0x00,0x00,0x02]
|
# CHECK: jr $16 # encoding: [0x08,0x00,0x00,0x02]
|
||||||
# WARNINGS: :[[@LINE+2]]:11: warning: used $16 with ".set at=$16"
|
# WARNINGS: :[[@LINE+2]]:11: warning: used $at (currently $16) without ".set noat"
|
||||||
.set at=$16
|
.set at=$16
|
||||||
jr $16
|
jr $16
|
||||||
# WARNINGS-NOT: warning
|
|
||||||
|
Reference in New Issue
Block a user