%ifdef VALGRIND_AWARE

%define VG_USERREQ__DISCARD_TRANSLATIONS 0x1002

%macro selfmod 2
		pusha
		sub		esp,6*4
		mov		dword [esp],    VG_USERREQ__DISCARD_TRANSLATIONS
		mov		dword [esp+4],  %1
		mov		dword [esp+8],  %2 - %1
		mov		dword [esp+12], 0
		mov		dword [esp+16], 0
		mov		dword [esp+20], 0
		mov		eax, esp
		; special instruction preamble
		rol		edi, 3
		rol		edi, 13
		rol		edi, 29
		rol		edi, 19
		xchg	ebx, ebx
		; restore state
		add		esp,6*4
		popa
%endmacro

%else

%macro selfmod 2
%endmacro

%endif