xref: /llvm-project/llvm/test/tools/llvm-ml/struct.asm (revision e074d580b28b8cdf31fc4813cbc886ef5149d203)
1*e074d580SEric Astor; RUN: llvm-ml -m64 -filetype=s %s /Fo - | FileCheck %s
28fee2ee9SEric Astor
38fee2ee9SEric Astor.data
48fee2ee9SEric AstorBAZ STRUCT
58fee2ee9SEric Astor  a BYTE 1
68fee2ee9SEric Astor  b BYTE 2
78fee2ee9SEric AstorBAZ ENDS
88fee2ee9SEric Astor
98fee2ee9SEric AstorFOOBAR struct 2
108fee2ee9SEric Astor  c BYTE 3 DUP (4)
118fee2ee9SEric Astor  d DWORD 5
128fee2ee9SEric Astor  e BAZ <>
138fee2ee9SEric Astor  STRUCT f
148fee2ee9SEric Astor    g BYTE 6
158fee2ee9SEric Astor    h BYTE 7
168fee2ee9SEric Astor  ends
178fee2ee9SEric Astor  h BYTE "abcde"
188fee2ee9SEric Astorfoobar ENDS
198fee2ee9SEric Astor
208fee2ee9SEric Astort1 foobar <>
218fee2ee9SEric Astor
228fee2ee9SEric Astor; CHECK: t1:
238fee2ee9SEric Astor;
248fee2ee9SEric Astor; BYTE 3 DUP (4), plus alignment padding
258fee2ee9SEric Astor; CHECK-NEXT: .byte 4
268fee2ee9SEric Astor; CHECK-NEXT: .byte 4
278fee2ee9SEric Astor; CHECK-NEXT: .byte 4
288fee2ee9SEric Astor; CHECK-NEXT: .zero 1
298fee2ee9SEric Astor;
308fee2ee9SEric Astor; DWORD 5
318fee2ee9SEric Astor; CHECK-NEXT: .long 5
328fee2ee9SEric Astor;
338fee2ee9SEric Astor; BAZ <>
348fee2ee9SEric Astor; CHECK-NEXT: .byte 1
358fee2ee9SEric Astor; CHECK-NEXT: .byte 2
368fee2ee9SEric Astor;
378fee2ee9SEric Astor; <BYTE 6, BYTE 7>, with no alignment padding (field size < alignment)
388fee2ee9SEric Astor; CHECK-NEXT: .byte 6
398fee2ee9SEric Astor; CHECK-NEXT: .byte 7
408fee2ee9SEric Astor;
418fee2ee9SEric Astor; BYTE "abcde", plus alignment padding
428fee2ee9SEric Astor; CHECK-NEXT: .byte 97
438fee2ee9SEric Astor; CHECK-NEXT: .byte 98
448fee2ee9SEric Astor; CHECK-NEXT: .byte 99
458fee2ee9SEric Astor; CHECK-NEXT: .byte 100
468fee2ee9SEric Astor; CHECK-NEXT: .byte 101
478fee2ee9SEric Astor; CHECK-NEXT: .zero 1
488fee2ee9SEric Astor
498fee2ee9SEric Astort2 FOOBAR <"gh",,<10,11>,<12>,'ijk'>
508fee2ee9SEric Astor
518fee2ee9SEric Astor; CHECK: t2:
528fee2ee9SEric Astor;
538fee2ee9SEric Astor; BYTE "gh", padded with " ", plus alignment padding
548fee2ee9SEric Astor; CHECK-NEXT: .byte 103
558fee2ee9SEric Astor; CHECK-NEXT: .byte 104
568fee2ee9SEric Astor; CHECK-NEXT: .byte 32
578fee2ee9SEric Astor; CHECK-NEXT: .zero 1
588fee2ee9SEric Astor;
598fee2ee9SEric Astor; DWORD 5 (default-initialized when omitted)
608fee2ee9SEric Astor; CHECK-NEXT: .long 5
618fee2ee9SEric Astor;
628fee2ee9SEric Astor; BAZ <10, 11>
638fee2ee9SEric Astor; CHECK-NEXT: .byte 10
648fee2ee9SEric Astor; CHECK-NEXT: .byte 11
658fee2ee9SEric Astor;
668fee2ee9SEric Astor; <BYTE 12, BYTE 7>, with no alignment padding (field size < alignment)
678fee2ee9SEric Astor; CHECK-NEXT: .byte 12
688fee2ee9SEric Astor; CHECK-NEXT: .byte 7
698fee2ee9SEric Astor;
708fee2ee9SEric Astor; BYTE "ijk", padded with " ", plus alignment padding
718fee2ee9SEric Astor; CHECK-NEXT: .byte 105
728fee2ee9SEric Astor; CHECK-NEXT: .byte 106
738fee2ee9SEric Astor; CHECK-NEXT: .byte 107
748fee2ee9SEric Astor; CHECK-NEXT: .byte 32
758fee2ee9SEric Astor; CHECK-NEXT: .byte 32
768fee2ee9SEric Astor; CHECK-NEXT: .zero 1
778fee2ee9SEric Astor
788fee2ee9SEric Astor.code
798fee2ee9SEric Astor
808fee2ee9SEric Astort3:
818fee2ee9SEric Astormov al, t2.f.h
828fee2ee9SEric Astormov al, [t2].f.h
838fee2ee9SEric Astormov al, [t2.f.h]
848fee2ee9SEric Astor
858fee2ee9SEric Astor; CHECK: t3:
868fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11]
878fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11]
888fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11]
898fee2ee9SEric Astor
908fee2ee9SEric Astort4:
918fee2ee9SEric Astormov al, j.FOOBAR.f.h
928fee2ee9SEric Astormov al, j.baz.b
938fee2ee9SEric Astor
948fee2ee9SEric Astor; CHECK: t4:
958fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + j+11]
968fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + j+1]
978fee2ee9SEric Astor
988fee2ee9SEric Astort5:
998fee2ee9SEric Astormov al, [ebx].FOOBAR.f.h
1008fee2ee9SEric Astormov al, [ebx.FOOBAR].f.h
1018fee2ee9SEric Astormov al, [ebx.FOOBAR.f.h]
1028fee2ee9SEric Astor
1038fee2ee9SEric Astor; CHECK: t5:
1048fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 11]
1058fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 11]
1068fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 11]
1078fee2ee9SEric Astor
1088fee2ee9SEric Astort6:
1098fee2ee9SEric Astormov al, t2.FOOBAR.f.h
1108fee2ee9SEric Astormov al, [t2].FOOBAR.f.h
1118fee2ee9SEric Astormov al, [t2.FOOBAR].f.h
1128fee2ee9SEric Astormov al, [t2.FOOBAR.f.h]
1138fee2ee9SEric Astor
1148fee2ee9SEric Astor; CHECK: t6:
1158fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11]
1168fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11]
1178fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11]
1188fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+11]
1198fee2ee9SEric Astor
1208fee2ee9SEric Astort7:
1218fee2ee9SEric Astormov al, [ebx].FOOBAR.e.b
1228fee2ee9SEric Astormov al, [ebx.FOOBAR].e.b
1238fee2ee9SEric Astormov al, [ebx.FOOBAR.e].b
1248fee2ee9SEric Astormov al, [ebx.FOOBAR.e.b]
1258fee2ee9SEric Astor
1268fee2ee9SEric Astor; CHECK: t7:
1278fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9]
1288fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9]
1298fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9]
1308fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 9]
1318fee2ee9SEric Astor
1328fee2ee9SEric Astort8:
1338fee2ee9SEric Astormov al, t2.FOOBAR.e.b
1348fee2ee9SEric Astormov al, [t2].FOOBAR.e.b
1358fee2ee9SEric Astormov al, [t2.FOOBAR].e.b
1368fee2ee9SEric Astormov al, [t2.FOOBAR.e].b
1378fee2ee9SEric Astormov al, [t2.FOOBAR.e.b]
1388fee2ee9SEric Astor
1398fee2ee9SEric Astor; CHECK: t8:
1408fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9]
1418fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9]
1428fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9]
1438fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9]
1448fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [rip + t2+9]
1458fee2ee9SEric Astor
1468fee2ee9SEric AstorQUUX STRUCT
1478fee2ee9SEric Astor  u DWORD ?
1488fee2ee9SEric Astor  UNION
1498fee2ee9SEric Astor    v WORD ?
1508fee2ee9SEric Astor    w DWORD ?
1518fee2ee9SEric Astor    STRUCT
1528fee2ee9SEric Astor      x BYTE ?
1538fee2ee9SEric Astor      y BYTE ?
1548fee2ee9SEric Astor    ENDS
1558fee2ee9SEric Astor    after_struct BYTE ?
1568fee2ee9SEric Astor  ENDS
1578fee2ee9SEric Astor  z DWORD ?
1588fee2ee9SEric AstorQUUX ENDS
1598fee2ee9SEric Astor
1608fee2ee9SEric Astort9:
1618fee2ee9SEric Astormov eax, [ebx].QUUX.u
1628fee2ee9SEric Astormov ax, [ebx].QUUX.v
1638fee2ee9SEric Astormov eax, [ebx].QUUX.w
1648fee2ee9SEric Astormov al, [ebx].QUUX.x
1658fee2ee9SEric Astormov al, [ebx].QUUX.y
1668fee2ee9SEric Astormov al, [ebx].QUUX.after_struct
1678fee2ee9SEric Astormov eax, [ebx].QUUX.z
1688fee2ee9SEric Astor
1698fee2ee9SEric Astor; CHECK: t9:
1708fee2ee9SEric Astor; CHECK-NEXT: mov eax, dword ptr [ebx]
1718fee2ee9SEric Astor; CHECK-NEXT: mov ax, word ptr [ebx + 4]
1728fee2ee9SEric Astor; CHECK-NEXT: mov eax, dword ptr [ebx + 4]
1738fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 4]
1748fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 5]
1758fee2ee9SEric Astor; CHECK-NEXT: mov al, byte ptr [ebx + 4]
1768fee2ee9SEric Astor; CHECK-NEXT: mov eax, dword ptr [ebx + 8]
1778fee2ee9SEric Astor
1788fee2ee9SEric Astort10:
1798fee2ee9SEric Astormov eax, FOOBAR.f
1808fee2ee9SEric Astormov eax, FOOBAR.f.h
1818fee2ee9SEric Astor
1828fee2ee9SEric Astor; CHECK: t10:
1838fee2ee9SEric Astor; CHECK-NEXT: mov eax, 10
1848fee2ee9SEric Astor; CHECK-NEXT: mov eax, 11
1858fee2ee9SEric Astor
1868fee2ee9SEric Astort11:
1878fee2ee9SEric Astormov ax, (FOOBAR PTR [ebx]).f
1888fee2ee9SEric Astormov ax, (FOOBAR PTR t1).f
1898fee2ee9SEric Astor
1908fee2ee9SEric Astor; CHECK: t11:
1918fee2ee9SEric Astor; CHECK-NEXT: mov ax, word ptr [ebx + 10]
1928fee2ee9SEric Astor; CHECK-NEXT: mov ax, word ptr [rip + t1+10]
1938fee2ee9SEric Astor
1948fee2ee9SEric AstorEND
195