Go to the documentation of this file.
44 #ifndef __X86EMU_PRIM_ASM_H
45 #define __X86EMU_PRIM_ASM_H
50 #define __HAVE_INLINE_ASSEMBLER__
53 u32 get_flags_asm(
void);
54 #pragma aux get_flags_asm = \
61 #pragma aux aaa_word_asm = \
72 #pragma aux aas_word_asm = \
83 #pragma aux aad_word_asm = \
94 #pragma aux aam_word_asm = \
105 #pragma aux adc_byte_asm = \
111 parm [edi] [al] [bl] \
113 modify exact [al bl];
116 #pragma aux adc_word_asm = \
122 parm [edi] [ax] [bx] \
124 modify exact [ax bx];
127 #pragma aux adc_long_asm = \
133 parm [edi] [eax] [ebx] \
135 modify exact [eax ebx];
138 #pragma aux add_byte_asm = \
144 parm [edi] [al] [bl] \
146 modify exact [al bl];
149 #pragma aux add_word_asm = \
155 parm [edi] [ax] [bx] \
157 modify exact [ax bx];
160 #pragma aux add_long_asm = \
166 parm [edi] [eax] [ebx] \
168 modify exact [eax ebx];
171 #pragma aux and_byte_asm = \
177 parm [edi] [al] [bl] \
179 modify exact [al bl];
182 #pragma aux and_word_asm = \
188 parm [edi] [ax] [bx] \
190 modify exact [ax bx];
193 #pragma aux and_long_asm = \
199 parm [edi] [eax] [ebx] \
201 modify exact [eax ebx];
204 #pragma aux cmp_byte_asm = \
210 parm [edi] [al] [bl] \
212 modify exact [al bl];
215 #pragma aux cmp_word_asm = \
221 parm [edi] [ax] [bx] \
223 modify exact [ax bx];
226 #pragma aux cmp_long_asm = \
232 parm [edi] [eax] [ebx] \
234 modify exact [eax ebx];
236 u8 daa_byte_asm(
u32 *flags,
u8 d);
237 #pragma aux daa_byte_asm = \
247 u8 das_byte_asm(
u32 *flags,
u8 d);
248 #pragma aux das_byte_asm = \
258 u8 dec_byte_asm(
u32 *flags,
u8 d);
259 #pragma aux dec_byte_asm = \
270 #pragma aux dec_word_asm = \
281 #pragma aux dec_long_asm = \
291 u8 inc_byte_asm(
u32 *flags,
u8 d);
292 #pragma aux inc_byte_asm = \
303 #pragma aux inc_word_asm = \
314 #pragma aux inc_long_asm = \
325 #pragma aux or_byte_asm = \
331 parm [edi] [al] [bl] \
333 modify exact [al bl];
336 #pragma aux or_word_asm = \
342 parm [edi] [ax] [bx] \
344 modify exact [ax bx];
347 #pragma aux or_long_asm = \
353 parm [edi] [eax] [ebx] \
355 modify exact [eax ebx];
357 u8 neg_byte_asm(
u32 *flags,
u8 d);
358 #pragma aux neg_byte_asm = \
369 #pragma aux neg_word_asm = \
380 #pragma aux neg_long_asm = \
390 u8 not_byte_asm(
u32 *flags,
u8 d);
391 #pragma aux not_byte_asm = \
402 #pragma aux not_word_asm = \
413 #pragma aux not_long_asm = \
424 #pragma aux rcl_byte_asm = \
430 parm [edi] [al] [cl] \
432 modify exact [al cl];
435 #pragma aux rcl_word_asm = \
441 parm [edi] [ax] [cl] \
443 modify exact [ax cl];
446 #pragma aux rcl_long_asm = \
452 parm [edi] [eax] [cl] \
454 modify exact [eax cl];
457 #pragma aux rcr_byte_asm = \
463 parm [edi] [al] [cl] \
465 modify exact [al cl];
468 #pragma aux rcr_word_asm = \
474 parm [edi] [ax] [cl] \
476 modify exact [ax cl];
479 #pragma aux rcr_long_asm = \
485 parm [edi] [eax] [cl] \
487 modify exact [eax cl];
490 #pragma aux rol_byte_asm = \
496 parm [edi] [al] [cl] \
498 modify exact [al cl];
501 #pragma aux rol_word_asm = \
507 parm [edi] [ax] [cl] \
509 modify exact [ax cl];
512 #pragma aux rol_long_asm = \
518 parm [edi] [eax] [cl] \
520 modify exact [eax cl];
523 #pragma aux ror_byte_asm = \
529 parm [edi] [al] [cl] \
531 modify exact [al cl];
534 #pragma aux ror_word_asm = \
540 parm [edi] [ax] [cl] \
542 modify exact [ax cl];
545 #pragma aux ror_long_asm = \
551 parm [edi] [eax] [cl] \
553 modify exact [eax cl];
556 #pragma aux shl_byte_asm = \
562 parm [edi] [al] [cl] \
564 modify exact [al cl];
567 #pragma aux shl_word_asm = \
573 parm [edi] [ax] [cl] \
575 modify exact [ax cl];
578 #pragma aux shl_long_asm = \
584 parm [edi] [eax] [cl] \
586 modify exact [eax cl];
589 #pragma aux shr_byte_asm = \
595 parm [edi] [al] [cl] \
597 modify exact [al cl];
600 #pragma aux shr_word_asm = \
606 parm [edi] [ax] [cl] \
608 modify exact [ax cl];
611 #pragma aux shr_long_asm = \
617 parm [edi] [eax] [cl] \
619 modify exact [eax cl];
622 #pragma aux sar_byte_asm = \
628 parm [edi] [al] [cl] \
630 modify exact [al cl];
633 #pragma aux sar_word_asm = \
639 parm [edi] [ax] [cl] \
641 modify exact [ax cl];
644 #pragma aux sar_long_asm = \
650 parm [edi] [eax] [cl] \
652 modify exact [eax cl];
655 #pragma aux shld_word_asm = \
661 parm [edi] [ax] [dx] [cl] \
663 modify exact [ax dx cl];
666 #pragma aux shld_long_asm = \
672 parm [edi] [eax] [edx] [cl] \
674 modify exact [eax edx cl];
677 #pragma aux shrd_word_asm = \
683 parm [edi] [ax] [dx] [cl] \
685 modify exact [ax dx cl];
688 #pragma aux shrd_long_asm = \
694 parm [edi] [eax] [edx] [cl] \
696 modify exact [eax edx cl];
699 #pragma aux sbb_byte_asm = \
705 parm [edi] [al] [bl] \
707 modify exact [al bl];
710 #pragma aux sbb_word_asm = \
716 parm [edi] [ax] [bx] \
718 modify exact [ax bx];
721 #pragma aux sbb_long_asm = \
727 parm [edi] [eax] [ebx] \
729 modify exact [eax ebx];
732 #pragma aux sub_byte_asm = \
738 parm [edi] [al] [bl] \
740 modify exact [al bl];
743 #pragma aux sub_word_asm = \
749 parm [edi] [ax] [bx] \
751 modify exact [ax bx];
754 #pragma aux sub_long_asm = \
760 parm [edi] [eax] [ebx] \
762 modify exact [eax ebx];
764 void test_byte_asm(
u32 *flags,
u8 d,
u8 s);
765 #pragma aux test_byte_asm = \
771 parm [edi] [al] [bl] \
772 modify exact [al bl];
774 void test_word_asm(
u32 *flags,
u16 d,
u16 s);
775 #pragma aux test_word_asm = \
781 parm [edi] [ax] [bx] \
782 modify exact [ax bx];
784 void test_long_asm(
u32 *flags,
u32 d,
u32 s);
785 #pragma aux test_long_asm = \
791 parm [edi] [eax] [ebx] \
792 modify exact [eax ebx];
795 #pragma aux xor_byte_asm = \
801 parm [edi] [al] [bl] \
803 modify exact [al bl];
806 #pragma aux xor_word_asm = \
812 parm [edi] [ax] [bx] \
814 modify exact [ax bx];
817 #pragma aux xor_long_asm = \
823 parm [edi] [eax] [ebx] \
825 modify exact [eax ebx];
827 void imul_byte_asm(
u32 *flags,
u16 *ax,
u8 d,
u8 s);
828 #pragma aux imul_byte_asm = \
835 parm [edi] [esi] [al] [bl] \
836 modify exact [esi ax bl];
839 #pragma aux imul_word_asm = \
847 parm [edi] [esi] [ecx] [ax] [bx]\
848 modify exact [esi edi ax bx dx];
851 #pragma aux imul_long_asm = \
859 parm [edi] [esi] [ecx] [eax] [ebx] \
860 modify exact [esi edi eax ebx edx];
862 void mul_byte_asm(
u32 *flags,
u16 *ax,
u8 d,
u8 s);
863 #pragma aux mul_byte_asm = \
870 parm [edi] [esi] [al] [bl] \
871 modify exact [esi ax bl];
874 #pragma aux mul_word_asm = \
882 parm [edi] [esi] [ecx] [ax] [bx]\
883 modify exact [esi edi ax bx dx];
886 #pragma aux mul_long_asm = \
894 parm [edi] [esi] [ecx] [eax] [ebx] \
895 modify exact [esi edi eax ebx edx];
897 void idiv_byte_asm(
u32 *flags,
u8 *al,
u8 *ah,
u16 d,
u8 s);
898 #pragma aux idiv_byte_asm = \
906 parm [edi] [esi] [ecx] [ax] [bl]\
907 modify exact [esi edi ax bl];
910 #pragma aux idiv_word_asm = \
918 parm [edi] [esi] [ecx] [ax] [dx] [bx]\
919 modify exact [esi edi ax dx bx];
922 #pragma aux idiv_long_asm = \
930 parm [edi] [esi] [ecx] [eax] [edx] [ebx]\
931 modify exact [esi edi eax edx ebx];
934 #pragma aux div_byte_asm = \
942 parm [edi] [esi] [ecx] [ax] [bl]\
943 modify exact [esi edi ax bl];
946 #pragma aux div_word_asm = \
954 parm [edi] [esi] [ecx] [ax] [dx] [bx]\
955 modify exact [esi edi ax dx bx];
958 #pragma aux div_long_asm = \
966 parm [edi] [esi] [ecx] [eax] [edx] [ebx]\
967 modify exact [esi edi eax edx ebx];