.psize 0 .text #test jumps and calls 1: jmp 1b jmp xxx jmp *xxx jmp xxx(,1) jmp *%edi jmp %edi jmp *(%edi) jmp (%edi) ljmp *xxx(,%edi,4) ljmp xxx(,%edi,4) ljmp *xxx ljmp xxx(,1) ljmp $0x1234,$xxx call 1b call xxx call *xxx call xxx(,1) call *%edi call %edi call *(%edi) call (%edi) lcall *xxx(,%edi,4) lcall xxx(,%edi,4) lcall *xxx lcall xxx(,1) lcall $0x1234,$xxx # test various segment reg insns push %ds pushl %ds pop %ds popl %ds mov %ds,%eax movl %ds,%eax movl %ds,%ax mov %eax,%ds movl %ax,%ds movl %eax,%ds pushw %ds popw %ds mov %ds,%ax movw %ds,%ax movw %ds,%eax mov %ax,%ds movw %ax,%ds movw %eax,%ds # test various pushes pushl $10 pushw $10 push $10 pushl $1000 pushw $1000 push $1000 pushl 1f pushw 1f push 1f push (1f-.)(%ebx) push 1f-. # these, and others like them should have no operand size prefix 1: lldt %cx lmsw %ax # Just to make sure these don't become illegal due to over-enthusiastic # register checking movsbw %al,%di movsbl %al,%ecx movswl %ax,%ecx movzbw %al,%di movzbl %al,%ecx movzwl %ax,%ecx in %dx,%al in %dx,%ax in %dx,%eax in (%dx),%al in (%dx),%ax in (%dx),%eax inb %dx,%al inw %dx,%ax inl %dx,%eax inb %dx inw %dx inl %dx inb $255 inw $2 inl $4 in $13, %ax out %al,%dx out %ax,%dx out %eax,%dx out %al,(%dx) out %ax,(%dx) out %eax,(%dx) outb %al,%dx outw %ax,%dx outl %eax,%dx outb %dx outw %dx outl %dx outb $255 outw $2 outl $4 out %ax, $13 # These are used in AIX. inw (%dx) outw (%dx) movsb cmpsw scasl xlatb movsl %cs:(%esi),%es:(%edi) setae (%ebx) setaeb (%ebx) setae %al #these should give warnings orb $1,%ax orb $1,%eax orb $1,%bx orb $1,%ebx fldl %st(1) fstl %st(2) fstpl %st(3) fcoml %st(4) fcompl %st(5) faddp %st(1),%st fmulp %st(2),%st fsubp %st(3),%st fsubrp %st(4),%st fdivp %st(5),%st fdivrp %st(6),%st fadd fsub fmul fdiv fsubr fdivr #these should all be legal btl %edx, 0x123456 btl %edx, %eax orb $1,%al orb $1,%bl movl 17,%eax mov 17,%eax inw %dx,%ax inl %dx,%eax inw (%dx),%ax inl (%dx),%eax in (%dx),%al in (%dx),%ax in (%dx),%eax movzbl (%edi,%esi),%edx movzbl 28(%ebp),%eax movzbl %al,%eax movzbl %cl,%esi xlat %es:(%ebx) xlat xlatb 1: fstp %st(0) loop 1b divb %cl divw %cx divl %ecx div %cl div %cx div %ecx div %cl,%al div %cx,%ax div %ecx,%eax mov %si,%ds movl %si,%ds # warning here pushl %ds push %ds mov 0,%al mov 0x10000,%ax mov %eax,%ebx pushf pushfl pushfw popf popfl popfw mov %esi,(,%ebx,1) andb $~0x80,foo and $0xfffe,%ax and $0xff00,%ax and $0xfffe,%eax and $0xff00,%eax and $0xfffffffe,%eax .code16 and $0xfffe,%ax and $0xff00,%ax and $0xfffe,%eax and $0xff00,%eax and $0xfffffffe,%eax #check 16-bit code auto address prefix .code16gcc leal -256(%ebp),%edx mov %al,-129(%ebp) mov %ah,-128(%ebp) leal -1760(%ebp),%ebx movl %eax,140(%esp) .code32 # Make sure that we won't remove movzb by accident. movzb %al,%di movzb %al,%ecx # Force a good alignment. .p2align 4,0