1 | /* <copyright> |
2 | This file is provided under a dual BSD/GPLv2 license. When using or |
3 | redistributing this file, you may do so under either license. |
4 | |
5 | GPL LICENSE SUMMARY |
6 | |
7 | Copyright (c) 2017-2020 Intel Corporation. All rights reserved. |
8 | |
9 | This program is free software; you can redistribute it and/or modify |
10 | it under the terms of version 2 of the GNU General Public License as |
11 | published by the Free Software Foundation. |
12 | |
13 | This program is distributed in the hope that it will be useful, but |
14 | WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 | General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. |
21 | The full GNU General Public License is included in this distribution |
22 | in the file called LICENSE.GPL. |
23 | |
24 | Contact Information: |
25 | http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ |
26 | |
27 | BSD LICENSE |
28 | |
29 | Copyright (c) 2017-2020 Intel Corporation. All rights reserved. |
30 | All rights reserved. |
31 | |
32 | Redistribution and use in source and binary forms, with or without |
33 | modification, are permitted provided that the following conditions |
34 | are met: |
35 | |
36 | * Redistributions of source code must retain the above copyright |
37 | notice, this list of conditions and the following disclaimer. |
38 | * Redistributions in binary form must reproduce the above copyright |
39 | notice, this list of conditions and the following disclaimer in |
40 | the documentation and/or other materials provided with the |
41 | distribution. |
42 | * Neither the name of Intel Corporation nor the names of its |
43 | contributors may be used to endorse or promote products derived |
44 | from this software without specific prior written permission. |
45 | |
46 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
47 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
48 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
49 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
50 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
51 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
52 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
53 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
54 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
55 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
56 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
57 | </copyright> */ |
58 | |
59 | // ///////////////////////////////////////////////////////////////////////// |
60 | ////// Intel Processor Trace Marker Functionality |
61 | //////////////////////////////////////////////////////////////////////////// |
62 | |
63 | .text |
64 | .align 16 |
65 | .globl __itt_pt_mark |
66 | .globl __itt_pt_event |
67 | .globl __itt_pt_mark_event |
68 | .globl __itt_pt_mark_threshold |
69 | .globl __itt_pt_byte |
70 | .globl __itt_pt_write |
71 | |
72 | /// void __itt_pt_mark(unsigned char index); |
73 | __itt_pt_mark: |
74 | __itt_pt_mark_int: |
75 | and $0xff, %rdi |
76 | call __itt_pt_mark_pic |
77 | __itt_pt_mark_pic: |
78 | popq %rax |
79 | lea (__itt_pt_mark_call_table - __itt_pt_mark_pic) (%rax,%rdi,4), %rdi |
80 | jmp *%rdi |
81 | |
82 | .long 0, 1, 2, 3 // GUID |
83 | .long 0xfadefade |
84 | |
85 | __itt_pt_mark_call_table: |
86 | retq |
87 | retq $0x0 |
88 | retq |
89 | retq $0x1 |
90 | retq |
91 | retq $0x2 |
92 | retq |
93 | retq $0x3 |
94 | retq |
95 | retq $0x4 |
96 | retq |
97 | retq $0x5 |
98 | retq |
99 | retq $0x6 |
100 | retq |
101 | retq $0x7 |
102 | retq |
103 | retq $0x8 |
104 | retq |
105 | retq $0x9 |
106 | retq |
107 | retq $0xa |
108 | retq |
109 | retq $0xb |
110 | retq |
111 | retq $0xc |
112 | retq |
113 | retq $0xd |
114 | retq |
115 | retq $0xe |
116 | retq |
117 | retq $0xf |
118 | |
119 | retq |
120 | retq $0x10 |
121 | retq |
122 | retq $0x11 |
123 | retq |
124 | retq $0x12 |
125 | retq |
126 | retq $0x13 |
127 | retq |
128 | retq $0x14 |
129 | retq |
130 | retq $0x15 |
131 | retq |
132 | retq $0x16 |
133 | retq |
134 | retq $0x17 |
135 | retq |
136 | retq $0x18 |
137 | retq |
138 | retq $0x19 |
139 | retq |
140 | retq $0x1a |
141 | retq |
142 | retq $0x1b |
143 | retq |
144 | retq $0x1c |
145 | retq |
146 | retq $0x1d |
147 | retq |
148 | retq $0x1e |
149 | retq |
150 | retq $0x1f |
151 | |
152 | retq |
153 | retq $0x20 |
154 | retq |
155 | retq $0x21 |
156 | retq |
157 | retq $0x22 |
158 | retq |
159 | retq $0x23 |
160 | retq |
161 | retq $0x24 |
162 | retq |
163 | retq $0x25 |
164 | retq |
165 | retq $0x26 |
166 | retq |
167 | retq $0x27 |
168 | retq |
169 | retq $0x28 |
170 | retq |
171 | retq $0x29 |
172 | retq |
173 | retq $0x2a |
174 | retq |
175 | retq $0x2b |
176 | retq |
177 | retq $0x2c |
178 | retq |
179 | retq $0x2d |
180 | retq |
181 | retq $0x2e |
182 | retq |
183 | retq $0x2f |
184 | |
185 | retq |
186 | retq $0x30 |
187 | retq |
188 | retq $0x31 |
189 | retq |
190 | retq $0x32 |
191 | retq |
192 | retq $0x33 |
193 | retq |
194 | retq $0x34 |
195 | retq |
196 | retq $0x35 |
197 | retq |
198 | retq $0x36 |
199 | retq |
200 | retq $0x37 |
201 | retq |
202 | retq $0x38 |
203 | retq |
204 | retq $0x39 |
205 | retq |
206 | retq $0x3a |
207 | retq |
208 | retq $0x3b |
209 | retq |
210 | retq $0x3c |
211 | retq |
212 | retq $0x3d |
213 | retq |
214 | retq $0x3e |
215 | retq |
216 | retq $0x3f |
217 | |
218 | retq |
219 | retq $0x40 |
220 | retq |
221 | retq $0x41 |
222 | retq |
223 | retq $0x42 |
224 | retq |
225 | retq $0x43 |
226 | retq |
227 | retq $0x44 |
228 | retq |
229 | retq $0x45 |
230 | retq |
231 | retq $0x46 |
232 | retq |
233 | retq $0x47 |
234 | retq |
235 | retq $0x48 |
236 | retq |
237 | retq $0x49 |
238 | retq |
239 | retq $0x4a |
240 | retq |
241 | retq $0x4b |
242 | retq |
243 | retq $0x4c |
244 | retq |
245 | retq $0x4d |
246 | retq |
247 | retq $0x4e |
248 | retq |
249 | retq $0x4f |
250 | |
251 | retq |
252 | retq $0x50 |
253 | retq |
254 | retq $0x51 |
255 | retq |
256 | retq $0x52 |
257 | retq |
258 | retq $0x53 |
259 | retq |
260 | retq $0x54 |
261 | retq |
262 | retq $0x55 |
263 | retq |
264 | retq $0x56 |
265 | retq |
266 | retq $0x57 |
267 | retq |
268 | retq $0x58 |
269 | retq |
270 | retq $0x59 |
271 | retq |
272 | retq $0x5a |
273 | retq |
274 | retq $0x5b |
275 | retq |
276 | retq $0x5c |
277 | retq |
278 | retq $0x5d |
279 | retq |
280 | retq $0x5e |
281 | retq |
282 | retq $0x5f |
283 | |
284 | retq |
285 | retq $0x60 |
286 | retq |
287 | retq $0x61 |
288 | retq |
289 | retq $0x62 |
290 | retq |
291 | retq $0x63 |
292 | retq |
293 | retq $0x64 |
294 | retq |
295 | retq $0x65 |
296 | retq |
297 | retq $0x66 |
298 | retq |
299 | retq $0x67 |
300 | retq |
301 | retq $0x68 |
302 | retq |
303 | retq $0x69 |
304 | retq |
305 | retq $0x6a |
306 | retq |
307 | retq $0x6b |
308 | retq |
309 | retq $0x6c |
310 | retq |
311 | retq $0x6d |
312 | retq |
313 | retq $0x6e |
314 | retq |
315 | retq $0x6f |
316 | |
317 | retq |
318 | retq $0x70 |
319 | retq |
320 | retq $0x71 |
321 | retq |
322 | retq $0x72 |
323 | retq |
324 | retq $0x73 |
325 | retq |
326 | retq $0x74 |
327 | retq |
328 | retq $0x75 |
329 | retq |
330 | retq $0x76 |
331 | retq |
332 | retq $0x77 |
333 | retq |
334 | retq $0x78 |
335 | retq |
336 | retq $0x79 |
337 | retq |
338 | retq $0x7a |
339 | retq |
340 | retq $0x7b |
341 | retq |
342 | retq $0x7c |
343 | retq |
344 | retq $0x7d |
345 | retq |
346 | retq $0x7e |
347 | retq |
348 | retq $0x7f |
349 | |
350 | retq |
351 | retq $0x80 |
352 | retq |
353 | retq $0x81 |
354 | retq |
355 | retq $0x82 |
356 | retq |
357 | retq $0x83 |
358 | retq |
359 | retq $0x84 |
360 | retq |
361 | retq $0x85 |
362 | retq |
363 | retq $0x86 |
364 | retq |
365 | retq $0x87 |
366 | retq |
367 | retq $0x88 |
368 | retq |
369 | retq $0x89 |
370 | retq |
371 | retq $0x8a |
372 | retq |
373 | retq $0x8b |
374 | retq |
375 | retq $0x8c |
376 | retq |
377 | retq $0x8d |
378 | retq |
379 | retq $0x8e |
380 | retq |
381 | retq $0x8f |
382 | |
383 | retq |
384 | retq $0x90 |
385 | retq |
386 | retq $0x91 |
387 | retq |
388 | retq $0x92 |
389 | retq |
390 | retq $0x93 |
391 | retq |
392 | retq $0x94 |
393 | retq |
394 | retq $0x95 |
395 | retq |
396 | retq $0x96 |
397 | retq |
398 | retq $0x97 |
399 | retq |
400 | retq $0x98 |
401 | retq |
402 | retq $0x99 |
403 | retq |
404 | retq $0x9a |
405 | retq |
406 | retq $0x9b |
407 | retq |
408 | retq $0x9c |
409 | retq |
410 | retq $0x9d |
411 | retq |
412 | retq $0x9e |
413 | retq |
414 | retq $0x9f |
415 | |
416 | retq |
417 | retq $0xa0 |
418 | retq |
419 | retq $0xa1 |
420 | retq |
421 | retq $0xa2 |
422 | retq |
423 | retq $0xa3 |
424 | retq |
425 | retq $0xa4 |
426 | retq |
427 | retq $0xa5 |
428 | retq |
429 | retq $0xa6 |
430 | retq |
431 | retq $0xa7 |
432 | retq |
433 | retq $0xa8 |
434 | retq |
435 | retq $0xa9 |
436 | retq |
437 | retq $0xaa |
438 | retq |
439 | retq $0xab |
440 | retq |
441 | retq $0xac |
442 | retq |
443 | retq $0xad |
444 | retq |
445 | retq $0xae |
446 | retq |
447 | retq $0xaf |
448 | |
449 | retq |
450 | retq $0xb0 |
451 | retq |
452 | retq $0xb1 |
453 | retq |
454 | retq $0xb2 |
455 | retq |
456 | retq $0xb3 |
457 | retq |
458 | retq $0xb4 |
459 | retq |
460 | retq $0xb5 |
461 | retq |
462 | retq $0xb6 |
463 | retq |
464 | retq $0xb7 |
465 | retq |
466 | retq $0xb8 |
467 | retq |
468 | retq $0xb9 |
469 | retq |
470 | retq $0xba |
471 | retq |
472 | retq $0xbb |
473 | retq |
474 | retq $0xbc |
475 | retq |
476 | retq $0xbd |
477 | retq |
478 | retq $0xbe |
479 | retq |
480 | retq $0xbf |
481 | |
482 | retq |
483 | retq $0xc0 |
484 | retq |
485 | retq $0xc1 |
486 | retq |
487 | retq $0xc2 |
488 | retq |
489 | retq $0xc3 |
490 | retq |
491 | retq $0xc4 |
492 | retq |
493 | retq $0xc5 |
494 | retq |
495 | retq $0xc6 |
496 | retq |
497 | retq $0xc7 |
498 | retq |
499 | retq $0xc8 |
500 | retq |
501 | retq $0xc9 |
502 | retq |
503 | retq $0xca |
504 | retq |
505 | retq $0xcb |
506 | retq |
507 | retq $0xcc |
508 | retq |
509 | retq $0xcd |
510 | retq |
511 | retq $0xce |
512 | retq |
513 | retq $0xcf |
514 | |
515 | retq |
516 | retq $0xd0 |
517 | retq |
518 | retq $0xd1 |
519 | retq |
520 | retq $0xd2 |
521 | retq |
522 | retq $0xd3 |
523 | retq |
524 | retq $0xd4 |
525 | retq |
526 | retq $0xd5 |
527 | retq |
528 | retq $0xd6 |
529 | retq |
530 | retq $0xd7 |
531 | retq |
532 | retq $0xd8 |
533 | retq |
534 | retq $0xd9 |
535 | retq |
536 | retq $0xda |
537 | retq |
538 | retq $0xdb |
539 | retq |
540 | retq $0xdc |
541 | retq |
542 | retq $0xdd |
543 | retq |
544 | retq $0xde |
545 | retq |
546 | retq $0xdf |
547 | |
548 | retq |
549 | retq $0xe0 |
550 | retq |
551 | retq $0xe1 |
552 | retq |
553 | retq $0xe2 |
554 | retq |
555 | retq $0xe3 |
556 | retq |
557 | retq $0xe4 |
558 | retq |
559 | retq $0xe5 |
560 | retq |
561 | retq $0xe6 |
562 | retq |
563 | retq $0xe7 |
564 | retq |
565 | retq $0xe8 |
566 | retq |
567 | retq $0xe9 |
568 | retq |
569 | retq $0xea |
570 | retq |
571 | retq $0xeb |
572 | retq |
573 | retq $0xec |
574 | retq |
575 | retq $0xed |
576 | retq |
577 | retq $0xee |
578 | retq |
579 | retq $0xef |
580 | |
581 | retq |
582 | retq $0xf0 |
583 | retq |
584 | retq $0xf1 |
585 | retq |
586 | retq $0xf2 |
587 | retq |
588 | retq $0xf3 |
589 | retq |
590 | retq $0xf4 |
591 | retq |
592 | retq $0xf5 |
593 | retq |
594 | retq $0xf6 |
595 | retq |
596 | retq $0xf7 |
597 | retq |
598 | retq $0xf8 |
599 | retq |
600 | retq $0xf9 |
601 | retq |
602 | retq $0xfa |
603 | retq |
604 | retq $0xfb |
605 | retq |
606 | retq $0xfc |
607 | retq |
608 | retq $0xfd |
609 | retq |
610 | retq $0xfe |
611 | retq |
612 | retq $0xff |
613 | |
614 | .align 16 |
615 | |
616 | __itt_pt_byte: |
617 | __itt_pt_byte_int: |
618 | |
619 | and $0xff, %rdi |
620 | call __itt_pt_byte_pic |
621 | __itt_pt_byte_pic: |
622 | popq %rcx |
623 | lea (__itt_pt_byte_call_table - __itt_pt_byte_pic) (%rcx,%rdi,1), %rdi |
624 | jmp *%rdi |
625 | |
626 | .align 4 |
627 | |
628 | .long 0, 1, 2, 3 // GUID |
629 | |
630 | .long 0xfadedeaf |
631 | |
632 | __itt_pt_byte_call_table: |
633 | |
634 | .fill 256,1,0xc3 |
635 | |
636 | .align 16 |
637 | |
638 | __itt_pt_event: |
639 | __itt_pt_event_int: |
640 | |
641 | pushq %rcx |
642 | mov %rdi,%rcx |
643 | rdpmc |
644 | |
645 | xor %rdi, %rdi |
646 | mov %al, %dil |
647 | call __itt_pt_byte_int |
648 | shr $8, %eax |
649 | mov %al, %dil |
650 | call __itt_pt_byte_int |
651 | shr $8, %eax |
652 | mov %al, %dil |
653 | call __itt_pt_byte_int |
654 | shr $8, %eax |
655 | mov %al, %dil |
656 | call __itt_pt_byte_int |
657 | |
658 | mov %dl, %dil |
659 | call __itt_pt_byte_int |
660 | shr $8, %edx |
661 | mov %dl, %dil |
662 | call __itt_pt_byte_int |
663 | shr $8, %edx |
664 | mov %dl, %dil |
665 | call __itt_pt_byte_int |
666 | shr $8, %edx |
667 | mov %dl, %dil |
668 | call __itt_pt_byte_int |
669 | |
670 | popq %rcx |
671 | ret |
672 | |
673 | .align 16 |
674 | |
675 | __itt_pt_mark_event: |
676 | |
677 | test $1, %rdi |
678 | jnz odd |
679 | mov %rdi, %rsi |
680 | xor %rdi,%rdi |
681 | call __itt_pt_event_int |
682 | mov %rsi, %rdi |
683 | jmp __itt_pt_mark_int |
684 | |
685 | odd: |
686 | call __itt_pt_mark_int |
687 | xor %rdi,%rdi |
688 | jmp __itt_pt_event_int |
689 | |
690 | |
691 | .align 16 |
692 | |
693 | __itt_pt_flush: |
694 | |
695 | call __itt_pt_flush_pic |
696 | __itt_pt_flush_pic: |
697 | popq %rdx |
698 | lea (__itt_pt_mark_flush_1 - __itt_pt_flush_pic) (%rdx), %rax |
699 | jmp *%rax |
700 | |
701 | .align 16 |
702 | nop |
703 | __itt_pt_mark_flush_1: |
704 | lea (__itt_pt_mark_flush_2 - __itt_pt_flush_pic) (%rdx), %rax |
705 | jmp *%rax |
706 | |
707 | .align 16 |
708 | nop |
709 | nop |
710 | __itt_pt_mark_flush_2: |
711 | lea (__itt_pt_mark_flush_3 - __itt_pt_flush_pic) (%rdx), %rax |
712 | jmp *%rax |
713 | |
714 | .align 16 |
715 | nop |
716 | nop |
717 | nop |
718 | __itt_pt_mark_flush_3: |
719 | ret |
720 | |
721 | .align 16 |
722 | |
723 | // int __itt_pt_mark_threshold(unsigned char index, unsigned long long* tmp, int threshold); |
724 | |
725 | __itt_pt_mark_threshold: |
726 | // rdi == index |
727 | // rsi == tmp |
728 | // rdx == threshold |
729 | mov %rdx, %r8 // r8 = threshold |
730 | xor %rdx, %rdx |
731 | xor %rax, %rax |
732 | test $1, %rdi |
733 | jnz mark_end |
734 | mark_begin: |
735 | mov $((1 << 30) + 1),%rcx |
736 | rdpmc |
737 | shl $32, %rdx |
738 | or %rax, %rdx |
739 | mov %rdx, (%rsi) |
740 | jmp __itt_pt_mark_int |
741 | mark_end: |
742 | mov $((1 << 30) + 1),%rcx |
743 | rdpmc |
744 | shl $32, %rdx |
745 | or %rax, %rdx |
746 | sub (%rsi), %rdx |
747 | cmp %r8, %rdx // threshold |
748 | jnc found |
749 | jmp __itt_pt_mark_int |
750 | found: |
751 | call __itt_pt_mark_int |
752 | jmp __itt_pt_flush |
753 | |
754 | // PTWRITE |
755 | |
756 | .align 16 |
757 | |
758 | // void __itt_pt_write(unsigned long long value); |
759 | |
760 | .long 0, 1, 2, 3 // GUID |
761 | |
762 | __itt_pt_write: |
763 | |
764 | // ptwrite rcx |
765 | .byte 0xF3, 0x48, 0x0F, 0xAE, 0xE1 |
766 | ret |
767 | |