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 | #define TOK_ASM_first TOK_ASM_clc | 28 | #define TOK_ASM_first TOK_ASM_clc |
| 29 | #define TOK_ASM_last TOK_ASM_emms | 29 | #define TOK_ASM_last TOK_ASM_emms |
| 30 | #define TOK_ASM_alllast TOK_ASM_pxor | ||
| 30 | 31 | ||
| 31 | #define OPC_JMP 0x01 /* jmp operand */ | 32 | #define OPC_JMP 0x01 /* jmp operand */ |
| 32 | #define OPC_B 0x02 /* only used with OPC_WL */ | 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 | g(b >> 8); | 716 | g(b >> 8); |
| 716 | g(b); | 717 | g(b); |
| 717 | return; | 718 | return; |
| 719 | } else if (opcode <= TOK_ASM_alllast) { | ||
| 720 | tcc_error("bad operand with opcode '%s'", | ||
| 721 | get_tok_str(opcode, NULL)); | ||
| 718 | } else { | 722 | } else { |
| 719 | tcc_error("unknown opcode '%s'", | 723 | tcc_error("unknown opcode '%s'", |
| 720 | get_tok_str(opcode, NULL)); | 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 | DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | 463 | DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 464 | DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | 464 | DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 465 | DEF_ASM_OP2(punpckldq, 0x0f62, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | 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 | #undef ALT | 468 | #undef ALT |
| 469 | #undef DEF_ASM_OP0 | 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 | DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | 438 | DEF_ASM_OP2(punpcklbw, 0x0f60, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 439 | DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | 439 | DEF_ASM_OP2(punpcklwd, 0x0f61, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) |
| 440 | DEF_ASM_OP2(punpckldq, 0x0f62, 0, OPC_MODRM, OPT_EA | OPT_MMX, OPT_MMX ) | 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 | #undef ALT | 443 | #undef ALT |
| 444 | #undef DEF_ASM_OP0 | 444 | #undef DEF_ASM_OP0 |