Hi Philippe,
The quick test below ( excluding the SSE stuff for the moment ) demonstrates that Poasm is successfully aligning the local structures to QWORD boundary.
include LocalStructAlign.inc
PRINTPAGERANGE STRUCT
nFromPage dd ?
nToPage dd ?
PRINTPAGERANGE ENDS
sample STRUCT
x db ?
y db ?
sample ENDS
.data
a1 db 'OFFSET var1 = %X',13,10,0
a2 db 'OFFSET var2 = %X',13,10,0
a3 db 'OFFSET ppr = %X',13,10,0
a4 db 'OFFSET s = %X',13,10,0
a5 db 'OFFSET var3 = %X',13,10,0
.data?
buffer db 64 dup(?)
.code
start PROC PARMAREA=4*QWORD
call main
invoke ExitProcess,0
start ENDP
main PROC PARMAREA=4*QWORD
LOCAL var1:QWORD ; rsp+50H
LOCAL var2:QWORD ; rsp+48H
LOCAL ppr:PRINTPAGERANGE ; rsp+38H
LOCAL s:sample ; rsp+30H
LOCAL var3:QWORD ; rsp+28H
invoke wsprintf,ADDR buffer,ADDR a1,ADDR var1
invoke StdOut,ADDR buffer
invoke wsprintf,ADDR buffer,ADDR a2,ADDR var2
invoke StdOut,ADDR buffer
invoke wsprintf,ADDR buffer,ADDR a3,ADDR ppr
invoke StdOut,ADDR buffer
invoke wsprintf,ADDR buffer,ADDR a4,ADDR s
invoke StdOut,ADDR buffer
invoke wsprintf,ADDR buffer,ADDR a5,ADDR var3
invoke StdOut,ADDR buffer
ret
main ENDP
Output on Windows 7 Sp1 :
OFFSET var1 = 22FC60
OFFSET var2 = 22FC58
OFFSET ppr = 22FC48
OFFSET s = 22FC40
OFFSET var3 = 22FC38