History

x86-asm: More opcodes

Some new opcodes and some aliases: ljmp[wl], prefetch{nta,t0,t1,t2}, bswap[lq], sysretq, swapgs.

Michael Matz committed 10 years ago

Commit 6a5ec8c1 parent d9d02902 files · +23 −0Browse files

Unified · Split

2 files
  1. tests/asmtest.S +11 −0
  2. x86_64-asm.h +12 −0
tests/asmtest.S+11−0
@@ -287,6 +287,8 @@ ljmp $0x100, $0x1000 · 286 unmodified lines
287#else287#else
288ljmp *0x100288ljmp *0x100
289ljmp *(%rdi)289ljmp *(%rdi)
290ljmpl *(%esi)
291ljmpw *(%esi)
290#endif292#endif
291 293
292ret294ret
@@ -484,6 +486,7 @@ L3: · 191 unmodified lines
484 fwait486 fwait
485 487
486bswap %edx488bswap %edx
489bswapl %ecx
487xadd %ecx, %edx490xadd %ecx, %edx
488xaddb %dl, 0x1000491xaddb %dl, 0x1000
489xaddw %ax, 0x1000492xaddw %ax, 0x1000
@@ -515,6 +518,7 @@ fucomip %st(5), %st · 25 unmodified lines
515 cmovns %edx, %edi518 cmovns %edx, %edi
516 cmovne %ax, %si519 cmovne %ax, %si
517#ifdef __x86_64__520#ifdef __x86_64__
521 bswapq %rsi
518 cmovz %rdi,%rbx522 cmovz %rdi,%rbx
519#endif523#endif
520 524
@@ -610,9 +614,14 @@ int $0x10 · 89 unmodified lines
610#ifdef __x86_64__614#ifdef __x86_64__
611 syscall615 syscall
612 sysret616 sysret
617 sysretq
613 lfence618 lfence
614 mfence619 mfence
615 sfence620 sfence
621 prefetchnta 0x18(%rdx)
622 prefetcht0 (%rcx)
623 prefetcht1 (%rsi)
624 prefetcht2 (%rdi)
616 clflush 0x1000(%rax,%rcx)625 clflush 0x1000(%rax,%rcx)
617 fxsaveq (%rdx)626 fxsaveq (%rdx)
618 fxrstorq (%rcx)627 fxrstorq (%rcx)
@@ -680,6 +689,8 @@ int $0x10 · 61 unmodified lines
680 lidtq 0x1000689 lidtq 0x1000
681 sgdtq 0x1000690 sgdtq 0x1000
682 sidtq 0x1000691 sidtq 0x1000
692
693 swapgs
683#endif694#endif
684 695
685 lmsw 0x1000696 lmsw 0x1000
x86_64-asm.h+12−0
@@ -91,6 +91,7 @@ ALT(DEF_ASM_OP2(btcw, 0x0fba, 7, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW | OPT_EA · 90 unmodified lines
91 91
92 DEF_ASM_OP0(syscall, 0x0f05)92 DEF_ASM_OP0(syscall, 0x0f05)
93 DEF_ASM_OP0(sysret, 0x0f07)93 DEF_ASM_OP0(sysret, 0x0f07)
94 DEF_ASM_OP0L(sysretq, 0x480f07, 0, 0)
94 DEF_ASM_OP0(ud2, 0x0f0b)95 DEF_ASM_OP0(ud2, 0x0f0b)
95 96
96 /* NOTE: we took the same order as gas opcode definition order */97 /* NOTE: we took the same order as gas opcode definition order */
@@ -216,6 +217,8 @@ ALT(DEF_ASM_OP1(jmp, 0xeb, 0, 0, OPT_DISP8)) · 119 unmodified lines
216 217
217ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA))218ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA))
218ALT(DEF_ASM_OP1(ljmp, 0xff, 5, OPC_MODRM, OPT_EA))219ALT(DEF_ASM_OP1(ljmp, 0xff, 5, OPC_MODRM, OPT_EA))
220 DEF_ASM_OP1(ljmpw, 0x66ff, 5, OPC_MODRM, OPT_EA)
221 DEF_ASM_OP1(ljmpl, 0xff, 5, OPC_MODRM, OPT_EA)
219 222
220ALT(DEF_ASM_OP1(int, 0xcd, 0, 0, OPT_IM8))223ALT(DEF_ASM_OP1(int, 0xcd, 0, 0, OPT_IM8))
221ALT(DEF_ASM_OP1(seto, 0x0f90, 0, OPC_MODRM | OPC_TEST, OPT_REG8 | OPT_EA))224ALT(DEF_ASM_OP1(seto, 0x0f90, 0, OPC_MODRM | OPC_TEST, OPT_REG8 | OPT_EA))
@@ -374,9 +377,14 @@ ALT(DEF_ASM_OP2(lslw, 0x0f03, 0, OPC_MODRM | OPC_WLX, OPT_EA | OPT_REG, OPT_REG) · 152 unmodified lines
374 DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM, OPT_REG16| OPT_EA)377 DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM, OPT_REG16| OPT_EA)
375 DEF_ASM_OP1(verr, 0x0f00, 4, OPC_MODRM, OPT_REG | OPT_EA)378 DEF_ASM_OP1(verr, 0x0f00, 4, OPC_MODRM, OPT_REG | OPT_EA)
376 DEF_ASM_OP1(verw, 0x0f00, 5, OPC_MODRM, OPT_REG | OPT_EA)379 DEF_ASM_OP1(verw, 0x0f00, 5, OPC_MODRM, OPT_REG | OPT_EA)
380 DEF_ASM_OP0L(swapgs, 0x0f01, 7, OPC_MODRM)
377 381
378 /* 486 */382 /* 486 */
383 /* bswap can't be applied to 16bit regs */
379 DEF_ASM_OP1(bswap, 0x0fc8, 0, OPC_REG, OPT_REG32 )384 DEF_ASM_OP1(bswap, 0x0fc8, 0, OPC_REG, OPT_REG32 )
385 DEF_ASM_OP1(bswapl, 0x0fc8, 0, OPC_REG, OPT_REG32 )
386 DEF_ASM_OP1(bswapq, 0x480fc8, 0, OPC_REG, OPT_REG64 )
387
380ALT(DEF_ASM_OP2(xaddb, 0x0fc0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA ))388ALT(DEF_ASM_OP2(xaddb, 0x0fc0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA ))
381ALT(DEF_ASM_OP2(cmpxchgb, 0x0fb0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA ))389ALT(DEF_ASM_OP2(cmpxchgb, 0x0fb0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA ))
382 DEF_ASM_OP1(invlpg, 0x0f01, 7, OPC_MODRM, OPT_EA )390 DEF_ASM_OP1(invlpg, 0x0f01, 7, OPC_MODRM, OPT_EA )
@@ -495,6 +503,10 @@ ALT(DEF_ASM_OP2(movhps, 0x0f17, 0, OPC_MODRM, OPT_SSE, OPT_EA | OPT_REG32 )) · 112 unmodified lines
495 DEF_ASM_OP2(sqrtps, 0x0f51, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )503 DEF_ASM_OP2(sqrtps, 0x0f51, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
496 DEF_ASM_OP2(subps, 0x0f5c, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )504 DEF_ASM_OP2(subps, 0x0f5c, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE )
497 505
506 DEF_ASM_OP1(prefetchnta, 0x0f18, 0, OPC_MODRM, OPT_EA)
507 DEF_ASM_OP1(prefetcht0, 0x0f18, 1, OPC_MODRM, OPT_EA)
508 DEF_ASM_OP1(prefetcht1, 0x0f18, 2, OPC_MODRM, OPT_EA)
509 DEF_ASM_OP1(prefetcht2, 0x0f18, 3, OPC_MODRM, OPT_EA)
498 DEF_ASM_OP0L(lfence, 0x0fae, 5, OPC_MODRM)510 DEF_ASM_OP0L(lfence, 0x0fae, 5, OPC_MODRM)
499 DEF_ASM_OP0L(mfence, 0x0fae, 6, OPC_MODRM)511 DEF_ASM_OP0L(mfence, 0x0fae, 6, OPC_MODRM)
500 DEF_ASM_OP0L(sfence, 0x0fae, 7, OPC_MODRM)512 DEF_ASM_OP0L(sfence, 0x0fae, 7, OPC_MODRM)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t