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…
Reference in a new issue