| @@ -376,8 +376,8 @@ static void asm_coprocessor_opcode(TCCState *s1, int token) { · 375 unmodified lines |
| 376 | 376 | for (i = 0; i < 3; ++i) { |
| 377 | 377 | skip(','); |
| 378 | 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) { |
| 380 | | − registers[i] = tok - TOK_ASM_r0; |
| 379 | + if (tok >= TOK_ASM_r0 && tok <= TOK_ASM_pc) { |
| 380 | + registers[i] = asm_parse_regvar(tok); |
| 381 | 381 | next(); |
| 382 | 382 | } else { |
| 383 | 383 | expect("'r<number>'"); |
| @@ -3072,23 +3072,20 @@ ST_FUNC void asm_clobber(uint8_t *clobber_regs, const char *str) · 2688 unmodified lines |
| 3072 | 3072 | Otherwise return -1. */ |
| 3073 | 3073 | ST_FUNC int asm_parse_regvar (int t) |
| 3074 | 3074 | { |
| 3075 | | − if (t >= TOK_ASM_r0 && t <= TOK_ASM_pc) { /* register name */ |
| 3076 | | − switch (t) { |
| 3077 | | − case TOK_ASM_fp: |
| 3078 | | − return TOK_ASM_r11 - TOK_ASM_r0; |
| 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 |
| 3075 | + /* coprocessors (p0-p15) and coprocessor registers (c0-c15) are handled elsewere */ |
| 3076 | + /* single fp (s0-s31) and double fp registers (d0-d15) are handled elsewere */ |
| 3077 | + |
| 3078 | + if (t < TOK_ASM_r0 || t > TOK_ASM_pc) /* filter unrelated registers */ |
| 3091 | 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 | /*************************************************************/ |