Display a different warning when an instruction is recognized by tcc but the operands found do not correspond to the constraints of the instruction.
Unified · Split
| @@ -27,6 +27,7 @@ · 26 unmodified lines | ||
| 27 | 27 | |
| 28 | 28 | #define TOK_ASM_first TOK_ASM_clc |
| 29 | 29 | #define TOK_ASM_last TOK_ASM_emms |
| 30 | +#define TOK_ASM_alllast TOK_ASM_pxor | |
| 30 | 31 | |
| 31 | 32 | #define OPC_JMP 0x01 /* jmp operand */ |
| 32 | 33 | #define OPC_B 0x02 /* only used with OPC_WL */ |
| @@ -715,6 +716,9 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode) · 682 unmodified lines | ||
| 715 | 716 | g(b >> 8); |
| 716 | 717 | g(b); |
| 717 | 718 | return; |
| 719 | + } else if (opcode <= TOK_ASM_alllast) { | |
| 720 | + tcc_error("bad operand with opcode '%s'", | |
| 721 | + get_tok_str(opcode, NULL)); | |
| 718 | 722 | } else { |
| 719 | 723 | tcc_error("unknown opcode '%s'", |
| 720 | 724 | get_tok_str(opcode, NULL)); |
| @@ -463,7 +463,7 @@ ALT(DEF_ASM_OP2(psrlq, 0x0f73, 2, OPC_MODRM, OPT_IM8, OPT_MMX )) · 462 unmodified lines | ||
| 463 | 463 | DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 464 | 464 | DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 465 | 465 | DEF_ASM_OP2(punpckldq, 0x0f62, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 466 | − DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | |
| 466 | + DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) /* must be last !OP0 */ | |
| 467 | 467 | |
| 468 | 468 | #undef ALT |
| 469 | 469 | #undef DEF_ASM_OP0 |
| @@ -438,7 +438,7 @@ ALT(DEF_ASM_OP2(psrlq, 0x0f73, 2, OPC_MODRM, OPT_IM8, OPT_MMX )) · 437 unmodified lines | ||
| 438 | 438 | DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 439 | 439 | DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 440 | 440 | DEF_ASM_OP2(punpckldq, 0x0f62, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 441 | − DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | |
| 441 | + DEF_ASM_OP2(pxor, 0x0fef, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) /* must be last !OP0 */ | |
| 442 | 442 | |
| 443 | 443 | #undef ALT |
| 444 | 444 | #undef DEF_ASM_OP0 |