xref: /llvm-project/llvm/test/CodeGen/M68k/inline-asm.ll (revision cd0d11be7a6de335dcfcf2788a97d915f017e25e)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=m68k < %s -o - | FileCheck %s
3
4@g = internal global i32 10, align 4
5
6; This function is primarily testing constant constraints that can NOT
7; be easily checked by Clang. For example, 'K' and 'M' are both
8; constraints for values that are outside certain numerical range.
9define void @constant_constraints() {
10; CHECK-LABEL: constant_constraints:
11; CHECK:         .cfi_startproc
12; CHECK-NEXT:  ; %bb.0: ; %entry
13; CHECK-NEXT:    ;APP
14; CHECK-NEXT:    move.l #1, %d1
15; CHECK-NEXT:    ;NO_APP
16; CHECK-NEXT:    ;APP
17; CHECK-NEXT:    move.l #8, %d1
18; CHECK-NEXT:    ;NO_APP
19; CHECK-NEXT:    ;APP
20; CHECK-NEXT:    move.l #-32768, %d1
21; CHECK-NEXT:    ;NO_APP
22; CHECK-NEXT:    ;APP
23; CHECK-NEXT:    move.l #32767, %d1
24; CHECK-NEXT:    ;NO_APP
25; CHECK-NEXT:    ;APP
26; CHECK-NEXT:    move.l #-129, %d1
27; CHECK-NEXT:    ;NO_APP
28; CHECK-NEXT:    ;APP
29; CHECK-NEXT:    move.l #128, %d1
30; CHECK-NEXT:    ;NO_APP
31; CHECK-NEXT:    ;APP
32; CHECK-NEXT:    move.l #-8, %d1
33; CHECK-NEXT:    ;NO_APP
34; CHECK-NEXT:    ;APP
35; CHECK-NEXT:    move.l #-1, %d1
36; CHECK-NEXT:    ;NO_APP
37; CHECK-NEXT:    ;APP
38; CHECK-NEXT:    move.l #-257, %d1
39; CHECK-NEXT:    ;NO_APP
40; CHECK-NEXT:    ;APP
41; CHECK-NEXT:    move.l #256, %d1
42; CHECK-NEXT:    ;NO_APP
43; CHECK-NEXT:    ;APP
44; CHECK-NEXT:    move.l #24, %d1
45; CHECK-NEXT:    ;NO_APP
46; CHECK-NEXT:    ;APP
47; CHECK-NEXT:    move.l #31, %d1
48; CHECK-NEXT:    ;NO_APP
49; CHECK-NEXT:    ;APP
50; CHECK-NEXT:    move.l #16, %d1
51; CHECK-NEXT:    ;NO_APP
52; CHECK-NEXT:    ;APP
53; CHECK-NEXT:    move.l #8, %d1
54; CHECK-NEXT:    ;NO_APP
55; CHECK-NEXT:    ;APP
56; CHECK-NEXT:    move.l #15, %d1
57; CHECK-NEXT:    ;NO_APP
58; CHECK-NEXT:    ;APP
59; CHECK-NEXT:    move.l #0, %d1
60; CHECK-NEXT:    ;NO_APP
61; CHECK-NEXT:    ;APP
62; CHECK-NEXT:    move.l #1, %d1
63; CHECK-NEXT:    ;NO_APP
64; CHECK-NEXT:    ;APP
65; CHECK-NEXT:    move.l #-32769, %d1
66; CHECK-NEXT:    ;NO_APP
67; CHECK-NEXT:    ;APP
68; CHECK-NEXT:    move.l #32768, %d1
69; CHECK-NEXT:    ;NO_APP
70; CHECK-NEXT:    rts
71entry:
72  call void asm sideeffect "move.l $0, %d1", "I"(i32 1)
73  call void asm sideeffect "move.l $0, %d1", "I"(i32 8)
74  call void asm sideeffect "move.l $0, %d1", "J"(i32 -32768)
75  call void asm sideeffect "move.l $0, %d1", "J"(i32 32767)
76  call void asm sideeffect "move.l $0, %d1", "K"(i32 -129)
77  call void asm sideeffect "move.l $0, %d1", "K"(i32 128)
78  call void asm sideeffect "move.l $0, %d1", "L"(i32 -8)
79  call void asm sideeffect "move.l $0, %d1", "L"(i32 -1)
80  call void asm sideeffect "move.l $0, %d1", "M"(i32 -257)
81  call void asm sideeffect "move.l $0, %d1", "M"(i32 256)
82  call void asm sideeffect "move.l $0, %d1", "N"(i32 24)
83  call void asm sideeffect "move.l $0, %d1", "N"(i32 31)
84  call void asm sideeffect "move.l $0, %d1", "O"(i32 16)
85  call void asm sideeffect "move.l $0, %d1", "P"(i32 8)
86  call void asm sideeffect "move.l $0, %d1", "P"(i32 15)
87  call void asm sideeffect "move.l $0, %d1", "^C0"(i32 0)
88  call void asm sideeffect "move.l $0, %d1", "^Ci"(i32 1)
89  call void asm sideeffect "move.l $0, %d1", "^Cj"(i32 -32769)
90  call void asm sideeffect "move.l $0, %d1", "^Cj"(i32 32768)
91  ret void
92}
93
94define void @register_constraints() {
95; CHECK-LABEL: register_constraints:
96; CHECK:         .cfi_startproc
97; CHECK-NEXT:  ; %bb.0: ; %entry
98; CHECK-NEXT:    suba.l #4, %sp
99; CHECK-NEXT:    .cfi_def_cfa_offset -8
100; CHECK-NEXT:    ;APP
101; CHECK-NEXT:    move.l #94, %d0
102; CHECK-NEXT:    ;NO_APP
103; CHECK-NEXT:    move.l %d0, (0,%sp)
104; CHECK-NEXT:    ;APP
105; CHECK-NEXT:    move.l #87, %d0
106; CHECK-NEXT:    ;NO_APP
107; CHECK-NEXT:    move.l %d0, (0,%sp)
108; CHECK-NEXT:    ;APP
109; CHECK-NEXT:    move.l #66, %a0
110; CHECK-NEXT:    ;NO_APP
111; CHECK-NEXT:    move.l %a0, (0,%sp)
112; CHECK-NEXT:    adda.l #4, %sp
113; CHECK-NEXT:    rts
114entry:
115  %out = alloca i32, align 4
116  %0 = call i32 asm sideeffect "move.l #94, $0", "=r"()
117  store i32 %0, ptr %out, align 4
118  %1 = call i32 asm sideeffect "move.l #87, $0", "=d"()
119  store i32 %1, ptr %out, align 4
120  %2 = call i32 asm sideeffect "move.l #66, $0", "=a"()
121  store i32 %2, ptr %out, align 4
122  ret void
123}
124
125define void @memory_constraints() {
126; CHECK-LABEL: memory_constraints:
127; CHECK:         .cfi_startproc
128; CHECK-NEXT:  ; %bb.0: ; %entry
129; CHECK-NEXT:    suba.l #4, %sp
130; CHECK-NEXT:    .cfi_def_cfa_offset -8
131; CHECK-NEXT:    ;APP
132; CHECK-NEXT:    move.l (0,%sp), %d1
133; CHECK-NEXT:    ;NO_APP
134; CHECK-NEXT:    ;APP
135; CHECK-NEXT:    move.l (g,%pc), %d2
136; CHECK-NEXT:    ;NO_APP
137; CHECK-NEXT:    lea (0,%sp), %a0
138; CHECK-NEXT:    ;APP
139; CHECK-NEXT:    move.l (%a0), %d3
140; CHECK-NEXT:    ;NO_APP
141; CHECK-NEXT:    ;APP
142; CHECK-NEXT:    move.l (0,%sp), %d4
143; CHECK-NEXT:    ;NO_APP
144; CHECK-NEXT:    adda.l #4, %sp
145; CHECK-NEXT:    rts
146entry:
147  %x = alloca i32, align 4
148  call void asm sideeffect "move.l $0, %d1", "*m"(ptr elementtype(i32) %x)
149  call void asm sideeffect "move.l $0, %d2", "*m"(ptr elementtype(i32) @g)
150  call void asm sideeffect "move.l $0, %d3", "*Q"(ptr elementtype(i32) %x)
151  call void asm sideeffect "move.l $0, %d4", "*U"(ptr elementtype(i32) %x)
152  ret void
153}
154
155