| @@ -376,8 +376,8 @@ static void asm_coprocessor_opcode(TCCState *s1, int token) { · 375 unmodified lines |
| 376 | for (i = 0; i < 3; ++i) { | 376 | for (i = 0; i < 3; ++i) { |
| 377 | skip(','); | 377 | skip(','); |
| 378 | if (i == 0 && token != TOK_ASM_cdp2 && (ARM_INSTRUCTION_GROUP(token) == TOK_ASM_mrceq || ARM_INSTRUCTION_GROUP(token) == TOK_ASM_mcreq)) { | 378 | if (i == 0 && token != TOK_ASM_cdp2 && (ARM_INSTRUCTION_GROUP(token) == TOK_ASM_mrceq || ARM_INSTRUCTION_GROUP(token) == TOK_ASM_mcreq)) { |
| 379 | if (tok >= TOK_ASM_r0 && tok <= TOK_ASM_r15) { | 379 | if (tok >= TOK_ASM_r0 && tok <= TOK_ASM_pc) { |
| 380 | registers[i] = tok - TOK_ASM_r0; | 380 | registers[i] = asm_parse_regvar(tok); |
| 381 | next(); | 381 | next(); |
| 382 | } else { | 382 | } else { |
| 383 | expect("'r<number>'"); | 383 | expect("'r<number>'"); |
| @@ -3072,23 +3072,20 @@ ST_FUNC void asm_clobber(uint8_t *clobber_regs, const char *str) · 2688 unmodified lines |
| 3072 | Otherwise return -1. */ | 3072 | Otherwise return -1. */ |
| 3073 | ST_FUNC int asm_parse_regvar (int t) | 3073 | ST_FUNC int asm_parse_regvar (int t) |
| 3074 | { | 3074 | { |
| 3075 | if (t >= TOK_ASM_r0 && t <= TOK_ASM_pc) { /* register name */ | 3075 | /* coprocessors (p0-p15) and coprocessor registers (c0-c15) are handled elsewere */ |
| 3076 | switch (t) { | 3076 | /* single fp (s0-s31) and double fp registers (d0-d15) are handled elsewere */ |
| 3077 | case TOK_ASM_fp: | 3077 | |
| 3078 | return TOK_ASM_r11 - TOK_ASM_r0; | 3078 | if (t < TOK_ASM_r0 || t > TOK_ASM_pc) /* filter unrelated registers */ |
| 3079 | case TOK_ASM_ip: | | |
| 3080 | return TOK_ASM_r12 - TOK_ASM_r0; | | |
| 3081 | case TOK_ASM_sp: | | |
| 3082 | return TOK_ASM_r13 - TOK_ASM_r0; | | |
| 3083 | case TOK_ASM_lr: | | |
| 3084 | return TOK_ASM_r14 - TOK_ASM_r0; | | |
| 3085 | case TOK_ASM_pc: | | |
| 3086 | return TOK_ASM_r15 - TOK_ASM_r0; | | |
| 3087 | default: | | |
| 3088 | return t - TOK_ASM_r0; | | |
| 3089 | } | | |
| 3090 | } else | | |
| 3091 | return -1; | 3079 | return -1; |
| | 3080 | |
| | 3081 | if (t <= TOK_ASM_r15) /* default register names r0-r15 */ |
| | 3082 | return t - TOK_ASM_r0; |
| | 3083 | |
| | 3084 | if (t <= TOK_ASM_v8) /* synonym register names a1-a4,v1-v8 (alias: r0-r11) */ |
| | 3085 | return t - TOK_ASM_a1; |
| | 3086 | |
| | 3087 | /* special register names sb/sl/fp/ip/sp/lr/pc (alias: r9-r15) */ |
| | 3088 | return t - TOK_ASM_sb + (TOK_ASM_r9 - TOK_ASM_r0); |
| 3092 | } | 3089 | } |
| 3093 | | 3090 | |
| 3094 | /*************************************************************/ | 3091 | /*************************************************************/ |