Compiler projects using llvm
; RUN: llvm-ml -filetype=s %s /Fo - | FileCheck %s

.data

FOO STRUCT 2
  x BYTE ?
  y WORD 5 DUP (?)
FOO ENDS

.code

t1:
; CHECK-LABEL: t1:

mov eax, sizeof BYTE
mov eax, (sizeof sBYTE)
mov eax, sizeof(Db)
mov eax, type BYTE
mov eax, (type sBYTE)
mov eax, type(Db)
; CHECK: mov eax, 1
; CHECK: mov eax, 1
; CHECK: mov eax, 1
; CHECK: mov eax, 1
; CHECK: mov eax, 1
; CHECK: mov eax, 1

mov eax, sizeof(word)
mov eax, type(word)
; CHECK: mov eax, 2
; CHECK: mov eax, 2
mov eax, sizeof(dword)
mov eax, type(dword)
; CHECK: mov eax, 4
; CHECK: mov eax, 4
mov eax, sizeof(fword)
mov eax, type(fword)
; CHECK: mov eax, 6
; CHECK: mov eax, 6
mov eax, sizeof(qword)
mov eax, type(qword)
; CHECK: mov eax, 8
; CHECK: mov eax, 8

mov eax, sizeof(real4)
mov eax, type(real4)
; CHECK: mov eax, 4
; CHECK: mov eax, 4
mov eax, sizeof(real8)
mov eax, type(real8)
; CHECK: mov eax, 8
; CHECK: mov eax, 8

mov eax, sizeof(FOO)
mov eax, type(FOO)
; CHECK: mov eax, 12
; CHECK: mov eax, 12


t2_full BYTE "ab"
t2_short DB ?
t2_signed SBYTE 3 DUP (?)

t2:
; CHECK-LABEL: t2:

mov eax, sizeof(t2_full)
mov eax, lengthof(t2_full)
mov eax, type(t2_full)
; CHECK: mov eax, 2
; CHECK: mov eax, 2
; CHECK: mov eax, 1

mov eax, sizeof(t2_short)
mov eax, lengthof(t2_short)
mov eax, type(t2_short)
; CHECK: mov eax, 1
; CHECK: mov eax, 1
; CHECK: mov eax, 1

mov eax, sizeof(t2_signed)
mov eax, lengthof(t2_signed)
mov eax, type(t2_signed)
; CHECK: mov eax, 3
; CHECK: mov eax, 3
; CHECK: mov eax, 1


t3_full WORD 2 DUP (?)
t3_short DW ?
t3_signed SWORD 3 DUP (?)

t3:
; CHECK-LABEL: t3:

mov eax, sizeof(t3_full)
mov eax, lengthof(t3_full)
mov eax, type(t3_full)
; CHECK: mov eax, 4
; CHECK: mov eax, 2
; CHECK: mov eax, 2

mov eax, sizeof(t3_short)
mov eax, lengthof(t3_short)
mov eax, type(t3_short)
; CHECK: mov eax, 2
; CHECK: mov eax, 1
; CHECK: mov eax, 2

mov eax, sizeof(t3_signed)
mov eax, lengthof(t3_signed)
mov eax, type(t3_signed)
; CHECK: mov eax, 6
; CHECK: mov eax, 3
; CHECK: mov eax, 2


t4_full DWORD 2 DUP (?)
t4_short DD ?
t4_signed SDWORD 3 DUP (?)

t4:
; CHECK-LABEL: t4:

mov eax, sizeof(t4_full)
mov eax, lengthof(t4_full)
mov eax, type(t4_full)
; CHECK: mov eax, 8
; CHECK: mov eax, 2
; CHECK: mov eax, 4

mov eax, sizeof(t4_short)
mov eax, lengthof(t4_short)
mov eax, type(t4_short)
; CHECK: mov eax, 4
; CHECK: mov eax, 1
; CHECK: mov eax, 4

mov eax, sizeof(t4_signed)
mov eax, lengthof(t4_signed)
mov eax, type(t4_signed)
; CHECK: mov eax, 12
; CHECK: mov eax, 3
; CHECK: mov eax, 4


t5_full FWORD 2 DUP (?)
t5_short DF ?

t5:
; CHECK-LABEL: t5:

mov eax, sizeof(t5_full)
mov eax, lengthof(t5_full)
mov eax, type(t5_full)
; CHECK: mov eax, 12
; CHECK: mov eax, 2
; CHECK: mov eax, 6

mov eax, sizeof(t5_short)
mov eax, lengthof(t5_short)
mov eax, type(t5_short)
; CHECK: mov eax, 6
; CHECK: mov eax, 1
; CHECK: mov eax, 6


t6_full QWORD 2 DUP (?)
t6_short DQ ?
t6_signed SQWORD 3 DUP (?)

t6:
; CHECK-LABEL: t6:

mov eax, sizeof(t6_full)
mov eax, lengthof(t6_full)
mov eax, type(t6_full)
; CHECK: mov eax, 16
; CHECK: mov eax, 2
; CHECK: mov eax, 8

mov eax, sizeof(t6_short)
mov eax, lengthof(t6_short)
mov eax, type(t6_short)
; CHECK: mov eax, 8
; CHECK: mov eax, 1
; CHECK: mov eax, 8

mov eax, sizeof(t6_signed)
mov eax, lengthof(t6_signed)
mov eax, type(t6_signed)
; CHECK: mov eax, 24
; CHECK: mov eax, 3
; CHECK: mov eax, 8


t7_single REAL4 2 DUP (?)
t7_double REAL8 ?
t7_extended REAL10 3 DUP (?)

t7:
; CHECK-LABEL: t7:

mov eax, sizeof(t7_single)
mov eax, lengthof(t7_single)
mov eax, type(t7_single)
; CHECK: mov eax, 8
; CHECK: mov eax, 2
; CHECK: mov eax, 4

mov eax, sizeof(t7_double)
mov eax, lengthof(t7_double)
mov eax, type(t7_double)
; CHECK: mov eax, 8
; CHECK: mov eax, 1
; CHECK: mov eax, 8

mov eax, sizeof(t7_extended)
mov eax, lengthof(t7_extended)
mov eax, type(t7_extended)
; CHECK: mov eax, 30
; CHECK: mov eax, 3
; CHECK: mov eax, 10


t8_var FOO <>, <>

t8:
; CHECK-LABEL: t8:

mov eax, sizeof(t8_var)
mov eax, lengthof(t8_var)
mov eax, type(t8_var)
; CHECK: mov eax, 24
; CHECK: mov eax, 2
; CHECK: mov eax, 12

mov eax, sizeof(t8_var.y)
mov eax, lengthof(t8_var.y)
mov eax, type(t8_var.y)
; CHECK: mov eax, 10
; CHECK: mov eax, 5
; CHECK: mov eax, 2

END