Updated packages will be publish shortly for 2.46.5.
I've started including the sub version number on the site so it's easier to see which is current , apart from checking the date.
Changes are:
1) Included a new oo3.sample that shows how to invoke methods from inside methods using thisPtr and pointer syntax.
mov rsi,thisPtr
assume rsi:PTR Person
mov rax,lstrlen([rcx].pName)
WriteConsole( [rsi].handle, [rsi].pName, eax, ADDR bWritten, NULL )
assume rsi:NOTHING
; calls to other instance methods with pointer syntax.
; -> Because the METHOD declaration sets the prototype, you cannot forward reference methods.
thisPtr->SetName("New name")
mov rcx,thisPtr
mov rax,[rcx].handle
mov rbx,[rcx].pName
invoke WriteConsole, rax, rbx, 8, ADDR bWritten, NULL
; calls to other instance methods with pointer syntax using a register.
lea rcx,thisPtr
[rcx].Person->SetName("New name")
2) Added a bunch of new regression tests and fixed some evex support queries around usage in macros, including decorators { } being passed in and out of macros and equate substitution in evex expressions.
vsubpd zmm0 {KMASK}, zmm1, zmm2 ; direct macro substitution works.
;--------------------------------------------------------
znoconst_rounding_single_nottp MACRO zmmval, zmmcarry, kwritemask
zfmsubpd zmmcarry, {kwritemask}, zmmval, zmm24, zmm20
zfmsubpd zmm16, {kwritemask}, zmmcarry, zmm26, zmm22
vsubpd zmmval {kwritemask}, zmmval, zmm16
ENDM
;--------------------------------------------------------
znoconst MACRO zmmval, kwritemask
vsubpd zmmval {kwritemask}, zmmval, zmm16
; multiple elements can be substituted in the macro, include
; placeholder for register and decorator.
vsubpd zmm2 {kwritemask}, zmmval, zmm16
; register + expanded decorator from macro parameter works.
3) Added optimisation, previously a 0 valued immediate would be optimised to an xor during invoke, now the same applies to zero-valued equates.