Detect correct instruction with incorrect operands
Display a different warning when an instruction is recognized by tcc but the operands found do not correspond to the constraints of the instruction.
This commit is contained in:
		
							parent
							
								
									45b35a3d66
								
							
						
					
					
						commit
						a1a691a030
					
				
					 3 changed files with 6 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -27,6 +27,7 @@
 | 
			
		|||
 | 
			
		||||
#define TOK_ASM_first TOK_ASM_clc
 | 
			
		||||
#define TOK_ASM_last TOK_ASM_emms
 | 
			
		||||
#define TOK_ASM_alllast TOK_ASM_pxor
 | 
			
		||||
 | 
			
		||||
#define OPC_JMP        0x01  /* jmp operand */
 | 
			
		||||
#define OPC_B          0x02  /* only used with OPC_WL */
 | 
			
		||||
| 
						 | 
				
			
			@ -715,6 +716,9 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode)
 | 
			
		|||
                g(b >> 8);
 | 
			
		||||
            g(b);
 | 
			
		||||
            return;
 | 
			
		||||
        } else if (opcode <= TOK_ASM_alllast) {
 | 
			
		||||
            tcc_error("bad operand with opcode '%s'",
 | 
			
		||||
                  get_tok_str(opcode, NULL));
 | 
			
		||||
        } else {
 | 
			
		||||
            tcc_error("unknown opcode '%s'",
 | 
			
		||||
                  get_tok_str(opcode, NULL));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -463,7 +463,7 @@ ALT(DEF_ASM_OP2(psrlq, 0x0f73, 2, OPC_MODRM, OPT_IM8, OPT_MMX ))
 | 
			
		|||
    DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(punpckldq, 0x0f62, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) /* must be last !OP0 */
 | 
			
		||||
 | 
			
		||||
#undef ALT
 | 
			
		||||
#undef DEF_ASM_OP0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -438,7 +438,7 @@ ALT(DEF_ASM_OP2(psrlq, 0x0f73, 2, OPC_MODRM, OPT_IM8, OPT_MMX ))
 | 
			
		|||
    DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(punpckldq, 0x0f62, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX )
 | 
			
		||||
    DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) /* must be last !OP0 */
 | 
			
		||||
 | 
			
		||||
#undef ALT
 | 
			
		||||
#undef DEF_ASM_OP0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue