mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-02 08:45:55 +00:00
Add support for the abs64 SPARC v9 code model.
For when 16 TB just isn't enough. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179474 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
87ce01739b
commit
618eda7a60
@ -1410,14 +1410,23 @@ SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const {
|
||||
default:
|
||||
llvm_unreachable("Unsupported absolute code model");
|
||||
case CodeModel::Small:
|
||||
// abs32.
|
||||
return makeHiLoPair(Op, SPII::MO_HI, SPII::MO_LO, DAG);
|
||||
case CodeModel::Medium: {
|
||||
// abs44.
|
||||
SDValue H44 = makeHiLoPair(Op, SPII::MO_H44, SPII::MO_M44, DAG);
|
||||
H44 = DAG.getNode(ISD::SHL, DL, VT, H44, DAG.getIntPtrConstant(12));
|
||||
SDValue L44 = withTargetFlags(Op, SPII::MO_L44, DAG);
|
||||
L44 = DAG.getNode(SPISD::Lo, DL, VT, L44);
|
||||
return DAG.getNode(ISD::ADD, DL, VT, H44, L44);
|
||||
}
|
||||
case CodeModel::Large: {
|
||||
// abs64.
|
||||
SDValue Hi = makeHiLoPair(Op, SPII::MO_HH, SPII::MO_HM, DAG);
|
||||
Hi = DAG.getNode(ISD::SHL, DL, VT, Hi, DAG.getIntPtrConstant(32));
|
||||
SDValue Lo = makeHiLoPair(Op, SPII::MO_HI, SPII::MO_LO, DAG);
|
||||
return DAG.getNode(ISD::ADD, DL, VT, Hi, Lo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
; RUN: llc < %s -march=sparc -relocation-model=static -code-model=small | FileCheck --check-prefix=abs32 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=static -code-model=small | FileCheck --check-prefix=abs32 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=static -code-model=medium | FileCheck --check-prefix=abs44 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=static -code-model=large | FileCheck --check-prefix=abs64 %s
|
||||
; RUN: llc < %s -march=sparc -relocation-model=pic -code-model=medium | FileCheck --check-prefix=v8pic32 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=pic -code-model=medium | FileCheck --check-prefix=v9pic32 %s
|
||||
|
||||
@ -21,6 +22,15 @@ entry:
|
||||
; abs44: ld [%[[R3]]+%l44(.LCPI0_0)], %f1
|
||||
; abs44: jmp %i7+8
|
||||
|
||||
; abs64: floatCP
|
||||
; abs64: sethi %hi(.LCPI0_0), %[[R1:[gilo][0-7]]]
|
||||
; abs64: add %[[R1]], %lo(.LCPI0_0), %[[R2:[gilo][0-7]]]
|
||||
; abs64: sethi %hh(.LCPI0_0), %[[R3:[gilo][0-7]]]
|
||||
; abs64: add %[[R3]], %hm(.LCPI0_0), %[[R4:[gilo][0-7]]]
|
||||
; abs64: sllx %[[R4]], 32, %[[R5:[gilo][0-7]]]
|
||||
; abs64: ld [%[[R5]]+%[[R2]]], %f1
|
||||
; abs64: jmp %i7+8
|
||||
|
||||
; v8pic32: floatCP
|
||||
; v8pic32: _GLOBAL_OFFSET_TABLE_
|
||||
; v8pic32: sethi %hi(.LCPI0_0), %[[R1:[gilo][0-7]]]
|
||||
|
@ -1,6 +1,7 @@
|
||||
; RUN: llc < %s -march=sparc -relocation-model=static -code-model=small | FileCheck --check-prefix=abs32 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=static -code-model=small | FileCheck --check-prefix=abs32 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=static -code-model=medium | FileCheck --check-prefix=abs44 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=static -code-model=large | FileCheck --check-prefix=abs64 %s
|
||||
; RUN: llc < %s -march=sparc -relocation-model=pic -code-model=medium | FileCheck --check-prefix=v8pic32 %s
|
||||
; RUN: llc < %s -march=sparcv9 -relocation-model=pic -code-model=medium | FileCheck --check-prefix=v9pic32 %s
|
||||
|
||||
@ -23,6 +24,15 @@ define zeroext i8 @loadG() {
|
||||
; abs44: ldub [%[[R3]]+%l44(G)], %i0
|
||||
; abs44: jmp %i7+8
|
||||
|
||||
; abs64: loadG
|
||||
; abs64: sethi %hi(G), %[[R1:[gilo][0-7]]]
|
||||
; abs64: add %[[R1]], %lo(G), %[[R2:[gilo][0-7]]]
|
||||
; abs64: sethi %hh(G), %[[R3:[gilo][0-7]]]
|
||||
; abs64: add %[[R3]], %hm(G), %[[R4:[gilo][0-7]]]
|
||||
; abs64: sllx %[[R4]], 32, %[[R5:[gilo][0-7]]]
|
||||
; abs64: ldub [%[[R5]]+%[[R2]]], %i0
|
||||
; abs64: jmp %i7+8
|
||||
|
||||
; v8pic32: loadG
|
||||
; v8pic32: _GLOBAL_OFFSET_TABLE_
|
||||
; v8pic32: sethi %hi(G), %[[R1:[gilo][0-7]]]
|
||||
|
Loading…
x
Reference in New Issue
Block a user