ittapi-sys 0.5.0

Rust bindings for ittapi
Documentation
COMMENT @
  Copyright (C) 2017-2025 Intel Corporation

  SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause
@

;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; ;;; Intel Processor Trace Marker Functionality
;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.686p
.xmm
.model  FLAT

_TEXT	segment

        public	___itt_pt_mark
        public	___itt_pt_event
        public	___itt_pt_mark_event
        public  ___itt_pt_mark_threshold
        public  ___itt_pt_write
        public  ___itt_pt_byte

        align   10h

;;; void __itt_pt_mark(unsigned char index);

___itt_pt_mark  proc    near

        movzx   eax,byte ptr [esp + 4]
        lea     eax,__itt_pt_mark_call_table[eax * 4]
        jmp	eax

        align   04h

        dd      0, 1, 2, 3      ;;; GUID

        dd      0fadefadeh      ;;; magic marker

__itt_pt_mark_call_table:

        dd      256 dup(0000c2c3h OR (( $ - offset __itt_pt_mark_call_table) SHL 14))

___itt_pt_mark  endp


___itt_pt_byte   proc   near

        mov      ecx,[esp + 4]

___itt_pt_byte_::

        and     ecx,0ffh
        lea     ecx,__itt_pt_byte_call_table[ecx]
        jmp	ecx

        align   04h

        dd      0, 1, 2, 3      ;;; GUID

        dd      0fadedeafh      ;;; magic marker

__itt_pt_byte_call_table:

        db      256 dup(0c3h)

___itt_pt_byte   endp

        align   10h

___itt_pt_event  proc   near

        push    ecx
        mov     ecx,[esp + 8]
        rdpmc

        mov     cl,al
        call    ___itt_pt_byte_
        mov     cl,ah
        call    ___itt_pt_byte_
        shr     eax,16
        mov     cl,al
        call    ___itt_pt_byte_
        mov     cl,ah
        call    ___itt_pt_byte_

        mov     cl,dl
        call    ___itt_pt_byte_
        mov     cl,dh
        call    ___itt_pt_byte_
        shr     edx,16
        mov     cl,dl
        call    ___itt_pt_byte_
        mov     cl,dh
        call    ___itt_pt_byte_

        pop     ecx
        ret

___itt_pt_event  endp

        align   10h

___itt_pt_mark_event    proc    near

        test    byte ptr [esp + 4],1
        jnz     odd
        push    0
        call    ___itt_pt_event
        add     esp,4
        jmp     ___itt_pt_mark

odd:
        push    dword ptr [esp + 4]
        call    ___itt_pt_mark
        add     esp,4
        mov     dword ptr [esp + 4],0
        jmp     ___itt_pt_event

___itt_pt_mark_event    endp

        align   10h

___itt_pt_flush proc    near

        lea     eax,offset __itt_pt_mark_flush_1
        jmp     eax

        align   10h
        nop
__itt_pt_mark_flush_1:
        lea     eax,offset __itt_pt_mark_flush_2
        jmp     eax

        align   10h
        nop
        nop
__itt_pt_mark_flush_2:
        lea     eax,offset __itt_pt_mark_flush_3
        jmp     eax

        align   10h
        nop
        nop
        nop
__itt_pt_mark_flush_3:
        ret

___itt_pt_flush endp

        align   10h

;;; int __itt_pt_mark_threshold(unsigned char index, unsigned long long* tmp, int threshold);

___itt_pt_mark_threshold        proc    near
        test    byte ptr [esp + 4],1    ;;; index
        jnz     mark_end
mark_begin:
        mov     ecx,(1 SHL 30) + 1
        rdpmc
        mov     ecx,[esp + 8]   ;;; tmp
        mov     [ecx + 0],eax
        mov     [ecx + 4],edx
        jmp     ___itt_pt_mark
mark_end:
        mov     ecx,(1 SHL 30) + 1
        rdpmc
        mov     ecx,[esp + 8]   ;;; tmp
        sub     eax,[ecx + 0]
        sbb     edx,[ecx + 4]
        or      edx,edx
        jnz     found
        cmp     edx,[esp + 12]  ;;; threshold
        jnc     found
        jmp     ___itt_pt_mark
found:
        call    ___itt_pt_mark
        jmp     ___itt_pt_flush

___itt_pt_mark_threshold        endp

;;; PTWRITE

        align   10h

;;; void __itt_pt_write(unsigned long long value);

        dd      0, 1, 2, 3      ;;; GUID

___itt_pt_write proc

;;;        ptwrite dword ptr [esp + 4]
        db      0F3h, 0Fh, 0AEh, 64h, 24h, 04h
        ret

___itt_pt_write endp

;;;

_TEXT	ends
        end