xref: /llvm-project/llvm/test/CodeGen/M68k/inline-asm.ll (revision cd0d11be7a6de335dcfcf2788a97d915f017e25e)
1dccf5c7dSMin-Yih Hsu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2dccf5c7dSMin-Yih Hsu; RUN: llc -mtriple=m68k < %s -o - | FileCheck %s
3dccf5c7dSMin-Yih Hsu
47335cd05SMin-Yih Hsu@g = internal global i32 10, align 4
57335cd05SMin-Yih Hsu
6dccf5c7dSMin-Yih Hsu; This function is primarily testing constant constraints that can NOT
7dccf5c7dSMin-Yih Hsu; be easily checked by Clang. For example, 'K' and 'M' are both
8dccf5c7dSMin-Yih Hsu; constraints for values that are outside certain numerical range.
9dccf5c7dSMin-Yih Hsudefine void @constant_constraints() {
10dccf5c7dSMin-Yih Hsu; CHECK-LABEL: constant_constraints:
11dccf5c7dSMin-Yih Hsu; CHECK:         .cfi_startproc
12dccf5c7dSMin-Yih Hsu; CHECK-NEXT:  ; %bb.0: ; %entry
13dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
14dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #1, %d1
15dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
16dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
17dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #8, %d1
18dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
19dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
20dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #-32768, %d1
21dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
22dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
23dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #32767, %d1
24dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
25dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
26dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #-129, %d1
27dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
28dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
29dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #128, %d1
30dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
31dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
32dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #-8, %d1
33dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
34dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
35dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #-1, %d1
36dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
37dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
38dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #-257, %d1
39dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
40dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
41dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #256, %d1
42dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
43dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
44dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #24, %d1
45dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
46dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
47dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #31, %d1
48dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
49dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
50dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #16, %d1
51dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
52dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
53dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #8, %d1
54dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
55dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
56dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #15, %d1
57dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
58dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
59dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #0, %d1
60dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
61dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
62dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #1, %d1
63dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
64dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
65dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #-32769, %d1
66dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
67dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
68dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #32768, %d1
69dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
70dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    rts
71dccf5c7dSMin-Yih Hsuentry:
72dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "I"(i32 1)
73dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "I"(i32 8)
74dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "J"(i32 -32768)
75dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "J"(i32 32767)
76dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "K"(i32 -129)
77dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "K"(i32 128)
78dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "L"(i32 -8)
79dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "L"(i32 -1)
80dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "M"(i32 -257)
81dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "M"(i32 256)
82dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "N"(i32 24)
83dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "N"(i32 31)
84dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "O"(i32 16)
85dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "P"(i32 8)
86dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "P"(i32 15)
87dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "^C0"(i32 0)
88dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "^Ci"(i32 1)
89dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "^Cj"(i32 -32769)
90dccf5c7dSMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "^Cj"(i32 32768)
91dccf5c7dSMin-Yih Hsu  ret void
92dccf5c7dSMin-Yih Hsu}
93dccf5c7dSMin-Yih Hsu
94dccf5c7dSMin-Yih Hsudefine void @register_constraints() {
95dccf5c7dSMin-Yih Hsu; CHECK-LABEL: register_constraints:
96dccf5c7dSMin-Yih Hsu; CHECK:         .cfi_startproc
97dccf5c7dSMin-Yih Hsu; CHECK-NEXT:  ; %bb.0: ; %entry
98657bb726SMin-Yih Hsu; CHECK-NEXT:    suba.l #4, %sp
99dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    .cfi_def_cfa_offset -8
100dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
101dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #94, %d0
102dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
103dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l %d0, (0,%sp)
104dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
105dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #87, %d0
106dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
107dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l %d0, (0,%sp)
108dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;APP
109dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l #66, %a0
110dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
111dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    move.l %a0, (0,%sp)
112657bb726SMin-Yih Hsu; CHECK-NEXT:    adda.l #4, %sp
113dccf5c7dSMin-Yih Hsu; CHECK-NEXT:    rts
114dccf5c7dSMin-Yih Hsuentry:
115dccf5c7dSMin-Yih Hsu  %out = alloca i32, align 4
116dccf5c7dSMin-Yih Hsu  %0 = call i32 asm sideeffect "move.l #94, $0", "=r"()
117*cd0d11beSFangrui Song  store i32 %0, ptr %out, align 4
118dccf5c7dSMin-Yih Hsu  %1 = call i32 asm sideeffect "move.l #87, $0", "=d"()
119*cd0d11beSFangrui Song  store i32 %1, ptr %out, align 4
120dccf5c7dSMin-Yih Hsu  %2 = call i32 asm sideeffect "move.l #66, $0", "=a"()
121*cd0d11beSFangrui Song  store i32 %2, ptr %out, align 4
122dccf5c7dSMin-Yih Hsu  ret void
123dccf5c7dSMin-Yih Hsu}
124dccf5c7dSMin-Yih Hsu
1257335cd05SMin-Yih Hsudefine void @memory_constraints() {
1267335cd05SMin-Yih Hsu; CHECK-LABEL: memory_constraints:
1277335cd05SMin-Yih Hsu; CHECK:         .cfi_startproc
1287335cd05SMin-Yih Hsu; CHECK-NEXT:  ; %bb.0: ; %entry
1297335cd05SMin-Yih Hsu; CHECK-NEXT:    suba.l #4, %sp
1307335cd05SMin-Yih Hsu; CHECK-NEXT:    .cfi_def_cfa_offset -8
1317335cd05SMin-Yih Hsu; CHECK-NEXT:    ;APP
1327335cd05SMin-Yih Hsu; CHECK-NEXT:    move.l (0,%sp), %d1
1337335cd05SMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
1347335cd05SMin-Yih Hsu; CHECK-NEXT:    ;APP
1357335cd05SMin-Yih Hsu; CHECK-NEXT:    move.l (g,%pc), %d2
1367335cd05SMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
1377335cd05SMin-Yih Hsu; CHECK-NEXT:    lea (0,%sp), %a0
1387335cd05SMin-Yih Hsu; CHECK-NEXT:    ;APP
1397335cd05SMin-Yih Hsu; CHECK-NEXT:    move.l (%a0), %d3
1407335cd05SMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
1417335cd05SMin-Yih Hsu; CHECK-NEXT:    ;APP
1427335cd05SMin-Yih Hsu; CHECK-NEXT:    move.l (0,%sp), %d4
1437335cd05SMin-Yih Hsu; CHECK-NEXT:    ;NO_APP
1447335cd05SMin-Yih Hsu; CHECK-NEXT:    adda.l #4, %sp
1457335cd05SMin-Yih Hsu; CHECK-NEXT:    rts
1467335cd05SMin-Yih Hsuentry:
1477335cd05SMin-Yih Hsu  %x = alloca i32, align 4
1487335cd05SMin-Yih Hsu  call void asm sideeffect "move.l $0, %d1", "*m"(ptr elementtype(i32) %x)
1497335cd05SMin-Yih Hsu  call void asm sideeffect "move.l $0, %d2", "*m"(ptr elementtype(i32) @g)
1507335cd05SMin-Yih Hsu  call void asm sideeffect "move.l $0, %d3", "*Q"(ptr elementtype(i32) %x)
1517335cd05SMin-Yih Hsu  call void asm sideeffect "move.l $0, %d4", "*U"(ptr elementtype(i32) %x)
1527335cd05SMin-Yih Hsu  ret void
1537335cd05SMin-Yih Hsu}
1547335cd05SMin-Yih Hsu
155