xref: /llvm-project/llvm/test/tools/llvm-ml/align_directives.asm (revision c8d0d8a8a16e52bc0d6856f36065f46da19b1713)
1; RUN: llvm-ml -filetype=s %s /Fo - | FileCheck %s
2
3.data
4
5align_test:
6ALIGN 16
7; CHECK-LABEL: align_test:
8; CHECK-NEXT: .p2align 4
9
10org_test:
11ORG 256
12; CHECK-LABEL: org_test:
13; CHECK-NEXT: .org 256, 0
14
15align_struct STRUCT
16  BYTE ?
17
18  ALIGN 4
19  x BYTE ?
20  x_succ BYTE ?
21  BYTE ?
22
23  ALIGN 2
24  y BYTE ?
25  y_succ BYTE ?
26
27  ALIGN 1
28  z BYTE ?
29
30  EVEN
31  q BYTE ?
32align_struct ENDS
33
34struct_align_data ALIGN_STRUCT <101, 102, 103, 104, 105, 106, 107, 108>
35; CHECK-LABEL: struct_align_data:
36; CHECK-NEXT: .byte 101
37; CHECK-NEXT: .zero 3
38; CHECK-NEXT: .byte 102
39; CHECK-NEXT: .byte 103
40; CHECK-NEXT: .byte 104
41; CHECK-NEXT: .zero 1
42; CHECK-NEXT: .byte 105
43; CHECK-NEXT: .byte 106
44; CHECK-NEXT: .byte 107
45; CHECK-NEXT: .zero 1
46; CHECK-NEXT: .byte 108
47
48org_struct STRUCT
49  x BYTE ?
50  x_succ BYTE ?
51  ORG 15
52  y BYTE ?
53  y_succ BYTE ?
54  ORG 2
55  z BYTE ?
56  z_succ BYTE ?
57org_struct ENDS
58
59.code
60
61struct_align_test PROC
62
63x_align_test:
64  MOV eax, align_struct.x
65  MOV eax, align_struct.x_succ
66; CHECK-LABEL: x_align_test:
67; CHECK-NEXT: mov eax, 4
68; CHECK-NEXT: mov eax, 5
69
70y_align_test:
71  MOV eax, align_struct.y
72  MOV eax, align_struct.y_succ
73; CHECK-LABEL: y_align_test:
74; CHECK-NEXT: mov eax, 8
75; CHECK-NEXT: mov eax, 9
76
77z_align_test:
78  MOV eax, align_struct.z
79; CHECK-LABEL: z_align_test:
80; CHECK-NEXT: mov eax, 10
81
82q_even_test:
83  MOV eax, align_struct.q
84; CHECK-LABEL: q_even_test:
85; CHECK-NEXT: mov eax, 12
86
87size_align_test:
88  MOV eax, SIZEOF(align_struct)
89; CHECK-LABEL: size_align_test:
90; CHECK-NEXT: mov eax, 13
91
92  ret
93struct_align_test ENDP
94
95struct_org_test PROC
96; CHECK-LABEL: struct_org_test:
97
98field_positions:
99  MOV eax, org_struct.x
100  MOV eax, org_struct.x_succ
101  MOV eax, org_struct.y
102  MOV eax, org_struct.y_succ
103  MOV eax, org_struct.z
104  MOV eax, org_struct.z_succ
105; CHECK-LABEL: field_positions:
106; CHECK-NEXT: mov eax, 0
107; CHECK-NEXT: mov eax, 1
108; CHECK-NEXT: mov eax, 15
109; CHECK-NEXT: mov eax, 16
110; CHECK-NEXT: mov eax, 2
111; CHECK-NEXT: mov eax, 3
112
113  ret
114struct_org_test ENDP
115
116end
117