mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 07:29:55 +00:00
Summary: Mips Linux uses $gp to hold a pointer to thread info structure and accesses it with a named register. This makes this work for LLVM. The N32 ABI doesn't quite work yet since the frontend generates incorrect IR for this case. It neglects to truncate the 64-bit GPR to a 32-bit value before converting to a pointer. Given correct IR (as in the testcase in this patch), it works correctly. Reviewers: sstankovic, vmedic, atanasyan Reviewed By: atanasyan Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6893 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225529 91177308-0d34-0410-b5e6-96231b3b80d8
18 lines
374 B
LLVM
18 lines
374 B
LLVM
; RUN: llc -march=mips64 -relocation-model=static -mattr=+noabicalls < %s | FileCheck %s
|
|
|
|
define i32* @get_gp() {
|
|
entry:
|
|
%0 = call i64 @llvm.read_register.i64(metadata !0)
|
|
%1 = inttoptr i64 %0 to i32*
|
|
ret i32* %1
|
|
}
|
|
|
|
; CHECK-LABEL: get_gp:
|
|
; CHECK: move $2, $gp
|
|
|
|
declare i64 @llvm.read_register.i64(metadata)
|
|
|
|
!llvm.named.register.$28 = !{!0}
|
|
|
|
!0 = !{!"$28"}
|