x86-asm: More opcodes
Some new opcodes and some aliases: ljmp[wl], prefetch{nta,t0,t1,t2},
bswap[lq], sysretq, swapgs.
			
			
This commit is contained in:
		
							parent
							
								
									d9d029006c
								
							
						
					
					
						commit
						6a5ec8cb3c
					
				
					 2 changed files with 23 additions and 0 deletions
				
			
		|  | @ -287,6 +287,8 @@ ljmp $0x100, $0x1000 | ||||||
| #else | #else | ||||||
| ljmp *0x100 | ljmp *0x100 | ||||||
| ljmp *(%rdi) | ljmp *(%rdi) | ||||||
|  | ljmpl *(%esi) | ||||||
|  | ljmpw *(%esi) | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| ret | ret | ||||||
|  | @ -484,6 +486,7 @@ L3: | ||||||
|     fwait |     fwait | ||||||
| 
 | 
 | ||||||
| bswap %edx | bswap %edx | ||||||
|  | bswapl %ecx | ||||||
| xadd %ecx, %edx | xadd %ecx, %edx | ||||||
| xaddb %dl, 0x1000 | xaddb %dl, 0x1000 | ||||||
| xaddw %ax, 0x1000 | xaddw %ax, 0x1000 | ||||||
|  | @ -515,6 +518,7 @@ fucomip %st(5), %st | ||||||
|  cmovns %edx, %edi |  cmovns %edx, %edi | ||||||
|  cmovne %ax, %si |  cmovne %ax, %si | ||||||
| #ifdef __x86_64__ | #ifdef __x86_64__ | ||||||
|  |  bswapq %rsi | ||||||
|  cmovz %rdi,%rbx |  cmovz %rdi,%rbx | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -610,9 +614,14 @@ int $0x10 | ||||||
| #ifdef __x86_64__ | #ifdef __x86_64__ | ||||||
|     syscall |     syscall | ||||||
|     sysret |     sysret | ||||||
|  |     sysretq | ||||||
|     lfence |     lfence | ||||||
|     mfence |     mfence | ||||||
|     sfence |     sfence | ||||||
|  |     prefetchnta 0x18(%rdx) | ||||||
|  |     prefetcht0 (%rcx) | ||||||
|  |     prefetcht1 (%rsi) | ||||||
|  |     prefetcht2 (%rdi) | ||||||
|     clflush 0x1000(%rax,%rcx) |     clflush 0x1000(%rax,%rcx) | ||||||
|     fxsaveq (%rdx) |     fxsaveq (%rdx) | ||||||
|     fxrstorq (%rcx) |     fxrstorq (%rcx) | ||||||
|  | @ -680,6 +689,8 @@ int $0x10 | ||||||
|     lidtq 0x1000 |     lidtq 0x1000 | ||||||
|     sgdtq 0x1000 |     sgdtq 0x1000 | ||||||
|     sidtq 0x1000 |     sidtq 0x1000 | ||||||
|  | 
 | ||||||
|  |     swapgs | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     lmsw 0x1000 |     lmsw 0x1000 | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								x86_64-asm.h
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								x86_64-asm.h
									
										
									
									
									
								
							|  | @ -91,6 +91,7 @@ ALT(DEF_ASM_OP2(btcw, 0x0fba, 7, OPC_MODRM | OPC_WLX, OPT_IM8, OPT_REGW | OPT_EA | ||||||
| 
 | 
 | ||||||
|      DEF_ASM_OP0(syscall, 0x0f05) |      DEF_ASM_OP0(syscall, 0x0f05) | ||||||
|      DEF_ASM_OP0(sysret, 0x0f07) |      DEF_ASM_OP0(sysret, 0x0f07) | ||||||
|  |      DEF_ASM_OP0L(sysretq, 0x480f07, 0, 0) | ||||||
|      DEF_ASM_OP0(ud2, 0x0f0b) |      DEF_ASM_OP0(ud2, 0x0f0b) | ||||||
| 
 | 
 | ||||||
|      /* NOTE: we took the same order as gas opcode definition order */ |      /* 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)) | ||||||
| 
 | 
 | ||||||
| ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA)) | ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA)) | ||||||
| ALT(DEF_ASM_OP1(ljmp, 0xff, 5, OPC_MODRM, OPT_EA)) | ALT(DEF_ASM_OP1(ljmp, 0xff, 5, OPC_MODRM, OPT_EA)) | ||||||
|  |     DEF_ASM_OP1(ljmpw, 0x66ff, 5, OPC_MODRM, OPT_EA) | ||||||
|  |     DEF_ASM_OP1(ljmpl, 0xff, 5, OPC_MODRM, OPT_EA) | ||||||
| 
 | 
 | ||||||
| ALT(DEF_ASM_OP1(int, 0xcd, 0, 0, OPT_IM8)) | ALT(DEF_ASM_OP1(int, 0xcd, 0, 0, OPT_IM8)) | ||||||
| ALT(DEF_ASM_OP1(seto, 0x0f90, 0, OPC_MODRM | OPC_TEST, OPT_REG8 | OPT_EA)) | ALT(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) | ||||||
|     DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM, OPT_REG16| OPT_EA) |     DEF_ASM_OP1(str, 0x0f00, 1, OPC_MODRM, OPT_REG16| OPT_EA) | ||||||
|     DEF_ASM_OP1(verr, 0x0f00, 4, OPC_MODRM, OPT_REG | OPT_EA) |     DEF_ASM_OP1(verr, 0x0f00, 4, OPC_MODRM, OPT_REG | OPT_EA) | ||||||
|     DEF_ASM_OP1(verw, 0x0f00, 5, OPC_MODRM, OPT_REG | OPT_EA) |     DEF_ASM_OP1(verw, 0x0f00, 5, OPC_MODRM, OPT_REG | OPT_EA) | ||||||
|  |     DEF_ASM_OP0L(swapgs, 0x0f01, 7, OPC_MODRM) | ||||||
| 
 | 
 | ||||||
|     /* 486 */ |     /* 486 */ | ||||||
|  |     /* bswap can't be applied to 16bit regs */ | ||||||
|     DEF_ASM_OP1(bswap, 0x0fc8, 0, OPC_REG, OPT_REG32 ) |     DEF_ASM_OP1(bswap, 0x0fc8, 0, OPC_REG, OPT_REG32 ) | ||||||
|  |     DEF_ASM_OP1(bswapl, 0x0fc8, 0, OPC_REG, OPT_REG32 ) | ||||||
|  |     DEF_ASM_OP1(bswapq, 0x480fc8, 0, OPC_REG, OPT_REG64 ) | ||||||
|  | 
 | ||||||
| ALT(DEF_ASM_OP2(xaddb, 0x0fc0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA )) | ALT(DEF_ASM_OP2(xaddb, 0x0fc0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA )) | ||||||
| ALT(DEF_ASM_OP2(cmpxchgb, 0x0fb0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA )) | ALT(DEF_ASM_OP2(cmpxchgb, 0x0fb0, 0, OPC_MODRM | OPC_BWLX, OPT_REG, OPT_REG | OPT_EA )) | ||||||
|     DEF_ASM_OP1(invlpg, 0x0f01, 7, OPC_MODRM, OPT_EA ) |     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 )) | ||||||
|     DEF_ASM_OP2(sqrtps, 0x0f51, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE ) |     DEF_ASM_OP2(sqrtps, 0x0f51, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE ) | ||||||
|     DEF_ASM_OP2(subps, 0x0f5c, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE ) |     DEF_ASM_OP2(subps, 0x0f5c, 0, OPC_MODRM, OPT_EA | OPT_SSE, OPT_SSE ) | ||||||
| 
 | 
 | ||||||
|  |     DEF_ASM_OP1(prefetchnta, 0x0f18, 0, OPC_MODRM, OPT_EA) | ||||||
|  |     DEF_ASM_OP1(prefetcht0, 0x0f18, 1, OPC_MODRM, OPT_EA) | ||||||
|  |     DEF_ASM_OP1(prefetcht1, 0x0f18, 2, OPC_MODRM, OPT_EA) | ||||||
|  |     DEF_ASM_OP1(prefetcht2, 0x0f18, 3, OPC_MODRM, OPT_EA) | ||||||
|     DEF_ASM_OP0L(lfence, 0x0fae, 5, OPC_MODRM) |     DEF_ASM_OP0L(lfence, 0x0fae, 5, OPC_MODRM) | ||||||
|     DEF_ASM_OP0L(mfence, 0x0fae, 6, OPC_MODRM) |     DEF_ASM_OP0L(mfence, 0x0fae, 6, OPC_MODRM) | ||||||
|     DEF_ASM_OP0L(sfence, 0x0fae, 7, OPC_MODRM) |     DEF_ASM_OP0L(sfence, 0x0fae, 7, OPC_MODRM) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue