diff options
author | Andrew Lenharth <andrewl@lenharth.org> | 2006-09-24 19:46:56 +0000 |
---|---|---|
committer | Andrew Lenharth <andrewl@lenharth.org> | 2006-09-24 19:46:56 +0000 |
commit | 0607a2f554d1f8daa68c2cc8486cec0886232fbb (patch) | |
tree | 80ab88725b8648c628642885b6c22993694dff84 | |
parent | beec30eaf301bd6882cd06800b5175b94f033f9d (diff) |
Fix jump tables to match gcc (and the ABI and whatnot)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30594 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/Alpha/AlphaISelLowering.cpp | 4 | ||||
-rw-r--r-- | lib/Target/Alpha/AlphaTargetAsmInfo.cpp | 2 | ||||
-rw-r--r-- | lib/Target/Alpha/AlphaTargetMachine.cpp | 1 |
3 files changed, 7 insertions, 0 deletions
diff --git a/lib/Target/Alpha/AlphaISelLowering.cpp b/lib/Target/Alpha/AlphaISelLowering.cpp index bcd60ed753..cbbad53285 100644 --- a/lib/Target/Alpha/AlphaISelLowering.cpp +++ b/lib/Target/Alpha/AlphaISelLowering.cpp @@ -129,6 +129,8 @@ AlphaTargetLowering::AlphaTargetLowering(TargetMachine &TM) : TargetLowering(TM) setOperationAction(ISD::RET, MVT::Other, Custom); setOperationAction(ISD::JumpTable, MVT::i64, Custom); + setOperationAction(ISD::JumpTable, MVT::i32, Custom); + setOperationAction(ISD::JumpTableRelocBase, MVT::i64, Custom); setStackPointerRegisterToSaveRestore(Alpha::R30); @@ -412,6 +414,8 @@ SDOperand AlphaTargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) { GP, RA); case ISD::RET: return LowerRET(Op,DAG, getVRegRA()); case ISD::JumpTable: return LowerJumpTable(Op, DAG); + case ISD::JumpTableRelocBase: + return DAG.getNode(AlphaISD::GlobalBaseReg, MVT::i64); case ISD::SINT_TO_FP: { assert(MVT::i64 == Op.getOperand(0).getValueType() && diff --git a/lib/Target/Alpha/AlphaTargetAsmInfo.cpp b/lib/Target/Alpha/AlphaTargetAsmInfo.cpp index fd77b87f2d..ed8f6cbe4a 100644 --- a/lib/Target/Alpha/AlphaTargetAsmInfo.cpp +++ b/lib/Target/Alpha/AlphaTargetAsmInfo.cpp @@ -18,4 +18,6 @@ using namespace llvm; AlphaTargetAsmInfo::AlphaTargetAsmInfo(const AlphaTargetMachine &TM) { AlignmentIsInBytes = false; PrivateGlobalPrefix = "$"; + JumpTableDirective = ".gprel32"; + JumpTableTextSection = "\t.section .rodata\n"; } diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp index 6204998b24..a1aab94d9a 100644 --- a/lib/Target/Alpha/AlphaTargetMachine.cpp +++ b/lib/Target/Alpha/AlphaTargetMachine.cpp @@ -59,6 +59,7 @@ AlphaTargetMachine::AlphaTargetMachine(const Module &M, const std::string &FS) FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0), JITInfo(*this), Subtarget(M, FS) { + setRelocationModel(Reloc::PIC_); } |