mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-23 15:29:51 +00:00
29f94c7201
This commit starts with a "git mv ARM64 AArch64" and continues out from there, renaming the C++ classes, intrinsics, and other target-local objects for consistency. "ARM64" test directories are also moved, and tests that began their life in ARM64 use an arm64 triple, those from AArch64 use an aarch64 triple. Both should be equivalent though. This finishes the AArch64 merge, and everyone should feel free to continue committing as normal now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209577 91177308-0d34-0410-b5e6-96231b3b80d8
203 lines
5.2 KiB
LLVM
203 lines
5.2 KiB
LLVM
; RUN: llc < %s -march=arm64 | FileCheck %s
|
|
|
|
;==--------------------------------------------------------------------------==
|
|
; Tests for MOV-immediate implemented with ORR-immediate.
|
|
;==--------------------------------------------------------------------------==
|
|
|
|
; 64-bit immed with 32-bit pattern size, rotated by 0.
|
|
define i64 @test64_32_rot0() nounwind {
|
|
; CHECK-LABEL: test64_32_rot0:
|
|
; CHECK: orr x0, xzr, #0x700000007
|
|
ret i64 30064771079
|
|
}
|
|
|
|
; 64-bit immed with 32-bit pattern size, rotated by 2.
|
|
define i64 @test64_32_rot2() nounwind {
|
|
; CHECK-LABEL: test64_32_rot2:
|
|
; CHECK: orr x0, xzr, #0xc0000003c0000003
|
|
ret i64 13835058071388291075
|
|
}
|
|
|
|
; 64-bit immed with 4-bit pattern size, rotated by 3.
|
|
define i64 @test64_4_rot3() nounwind {
|
|
; CHECK-LABEL: test64_4_rot3:
|
|
; CHECK: orr x0, xzr, #0xeeeeeeeeeeeeeeee
|
|
ret i64 17216961135462248174
|
|
}
|
|
|
|
; 32-bit immed with 32-bit pattern size, rotated by 16.
|
|
define i32 @test32_32_rot16() nounwind {
|
|
; CHECK-LABEL: test32_32_rot16:
|
|
; CHECK: orr w0, wzr, #0xff0000
|
|
ret i32 16711680
|
|
}
|
|
|
|
; 32-bit immed with 2-bit pattern size, rotated by 1.
|
|
define i32 @test32_2_rot1() nounwind {
|
|
; CHECK-LABEL: test32_2_rot1:
|
|
; CHECK: orr w0, wzr, #0xaaaaaaaa
|
|
ret i32 2863311530
|
|
}
|
|
|
|
;==--------------------------------------------------------------------------==
|
|
; Tests for MOVZ with MOVK.
|
|
;==--------------------------------------------------------------------------==
|
|
|
|
define i32 @movz() nounwind {
|
|
; CHECK-LABEL: movz:
|
|
; CHECK: movz w0, #0x5
|
|
ret i32 5
|
|
}
|
|
|
|
define i64 @movz_3movk() nounwind {
|
|
; CHECK-LABEL: movz_3movk:
|
|
; CHECK: movz x0, #0x5, lsl #48
|
|
; CHECK-NEXT: movk x0, #0x1234, lsl #32
|
|
; CHECK-NEXT: movk x0, #0xabcd, lsl #16
|
|
; CHECK-NEXT: movk x0, #0x5678
|
|
ret i64 1427392313513592
|
|
}
|
|
|
|
define i64 @movz_movk_skip1() nounwind {
|
|
; CHECK-LABEL: movz_movk_skip1:
|
|
; CHECK: movz x0, #0x5, lsl #32
|
|
; CHECK-NEXT: movk x0, #0x4321, lsl #16
|
|
ret i64 22601072640
|
|
}
|
|
|
|
define i64 @movz_skip1_movk() nounwind {
|
|
; CHECK-LABEL: movz_skip1_movk:
|
|
; CHECK: movz x0, #0x8654, lsl #32
|
|
; CHECK-NEXT: movk x0, #0x1234
|
|
ret i64 147695335379508
|
|
}
|
|
|
|
;==--------------------------------------------------------------------------==
|
|
; Tests for MOVN with MOVK.
|
|
;==--------------------------------------------------------------------------==
|
|
|
|
define i64 @movn() nounwind {
|
|
; CHECK-LABEL: movn:
|
|
; CHECK: movn x0, #0x29
|
|
ret i64 -42
|
|
}
|
|
|
|
define i64 @movn_skip1_movk() nounwind {
|
|
; CHECK-LABEL: movn_skip1_movk:
|
|
; CHECK: movn x0, #0x29, lsl #32
|
|
; CHECK-NEXT: movk x0, #0x1234
|
|
ret i64 -176093720012
|
|
}
|
|
|
|
;==--------------------------------------------------------------------------==
|
|
; Tests for ORR with MOVK.
|
|
;==--------------------------------------------------------------------------==
|
|
; rdar://14987673
|
|
|
|
define i64 @orr_movk1() nounwind {
|
|
; CHECK-LABEL: orr_movk1:
|
|
; CHECK: orr x0, xzr, #0xffff0000ffff0
|
|
; CHECK: movk x0, #0xdead, lsl #16
|
|
ret i64 72056498262245120
|
|
}
|
|
|
|
define i64 @orr_movk2() nounwind {
|
|
; CHECK-LABEL: orr_movk2:
|
|
; CHECK: orr x0, xzr, #0xffff0000ffff0
|
|
; CHECK: movk x0, #0xdead, lsl #48
|
|
ret i64 -2400982650836746496
|
|
}
|
|
|
|
define i64 @orr_movk3() nounwind {
|
|
; CHECK-LABEL: orr_movk3:
|
|
; CHECK: orr x0, xzr, #0xffff0000ffff0
|
|
; CHECK: movk x0, #0xdead, lsl #32
|
|
ret i64 72020953688702720
|
|
}
|
|
|
|
define i64 @orr_movk4() nounwind {
|
|
; CHECK-LABEL: orr_movk4:
|
|
; CHECK: orr x0, xzr, #0xffff0000ffff0
|
|
; CHECK: movk x0, #0xdead
|
|
ret i64 72056494543068845
|
|
}
|
|
|
|
; rdar://14987618
|
|
define i64 @orr_movk5() nounwind {
|
|
; CHECK-LABEL: orr_movk5:
|
|
; CHECK: orr x0, xzr, #0xff00ff00ff00ff00
|
|
; CHECK: movk x0, #0xdead, lsl #16
|
|
ret i64 -71777214836900096
|
|
}
|
|
|
|
define i64 @orr_movk6() nounwind {
|
|
; CHECK-LABEL: orr_movk6:
|
|
; CHECK: orr x0, xzr, #0xff00ff00ff00ff00
|
|
; CHECK: movk x0, #0xdead, lsl #16
|
|
; CHECK: movk x0, #0xdead, lsl #48
|
|
ret i64 -2400982647117578496
|
|
}
|
|
|
|
define i64 @orr_movk7() nounwind {
|
|
; CHECK-LABEL: orr_movk7:
|
|
; CHECK: orr x0, xzr, #0xff00ff00ff00ff00
|
|
; CHECK: movk x0, #0xdead, lsl #48
|
|
ret i64 -2400982646575268096
|
|
}
|
|
|
|
define i64 @orr_movk8() nounwind {
|
|
; CHECK-LABEL: orr_movk8:
|
|
; CHECK: orr x0, xzr, #0xff00ff00ff00ff00
|
|
; CHECK: movk x0, #0xdead
|
|
; CHECK: movk x0, #0xdead, lsl #48
|
|
ret i64 -2400982646575276371
|
|
}
|
|
|
|
; rdar://14987715
|
|
define i64 @orr_movk9() nounwind {
|
|
; CHECK-LABEL: orr_movk9:
|
|
; CHECK: orr x0, xzr, #0xffffff000000000
|
|
; CHECK: movk x0, #0xff00
|
|
; CHECK: movk x0, #0xdead, lsl #16
|
|
ret i64 1152921439623315200
|
|
}
|
|
|
|
define i64 @orr_movk10() nounwind {
|
|
; CHECK-LABEL: orr_movk10:
|
|
; CHECK: orr x0, xzr, #0xfffffffffffff00
|
|
; CHECK: movk x0, #0xdead, lsl #16
|
|
ret i64 1152921504047824640
|
|
}
|
|
|
|
define i64 @orr_movk11() nounwind {
|
|
; CHECK-LABEL: orr_movk11:
|
|
; CHECK: orr x0, xzr, #0xfff00000000000ff
|
|
; CHECK: movk x0, #0xdead, lsl #16
|
|
; CHECK: movk x0, #0xffff, lsl #32
|
|
ret i64 -4222125209747201
|
|
}
|
|
|
|
define i64 @orr_movk12() nounwind {
|
|
; CHECK-LABEL: orr_movk12:
|
|
; CHECK: orr x0, xzr, #0xfff00000000000ff
|
|
; CHECK: movk x0, #0xdead, lsl #32
|
|
ret i64 -4258765016661761
|
|
}
|
|
|
|
define i64 @orr_movk13() nounwind {
|
|
; CHECK-LABEL: orr_movk13:
|
|
; CHECK: orr x0, xzr, #0xfffff000000
|
|
; CHECK: movk x0, #0xdead
|
|
; CHECK: movk x0, #0xdead, lsl #48
|
|
ret i64 -2401245434149282131
|
|
}
|
|
|
|
; rdar://13944082
|
|
define i64 @g() nounwind {
|
|
; CHECK-LABEL: g:
|
|
; CHECK: movz x0, #0xffff, lsl #48
|
|
; CHECK: movk x0, #0x2
|
|
entry:
|
|
ret i64 -281474976710654
|
|
}
|