History

arm-asm: Accept additional register names

Detlef Riekenberg committed 1 year ago

Commit 6ca22831 parent 30c23732 files · +35 −20Browse files

Unified · Split

2 files
  1. arm-asm.c +15 −18
  2. arm-tok.h +20 −2
arm-asm.c+15−18
@@ -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. */
3073ST_FUNC int asm_parse_regvar (int t)3073ST_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/*************************************************************/
arm-tok.h+20−2
@@ -20,8 +20,26 @@ · 19 unmodified lines
20 DEF_ASM(r14) /* lr */20 DEF_ASM(r14) /* lr */
21 DEF_ASM(r15) /* pc */21 DEF_ASM(r15) /* pc */
22 22
23/* register macros */23/* synonym register names */
24 24
25 DEF_ASM(a1) /* argument/result/scratch register 1: alias for r0 */
26 DEF_ASM(a2) /* argument/result/scratch register 2: alias for r1 */
27 DEF_ASM(a3) /* argument/result/scratch register 3: alias for r2 */
28 DEF_ASM(a4) /* argument/result/scratch register 4: alias for r3 */
29
30 DEF_ASM(v1) /* variable register 1: alias for r4 */
31 DEF_ASM(v2) /* variable register 2: alias for r5 */
32 DEF_ASM(v3) /* variable register 3: alias for r6 */
33 DEF_ASM(v4) /* variable register 4: alias for r7 */
34 DEF_ASM(v5) /* ARM state variable register 5: alias for r8 */
35 DEF_ASM(v6) /* ARM state variable register 6: alias for r9 */
36 DEF_ASM(v7) /* ARM state variable register 7: alias for r10 */
37 DEF_ASM(v8) /* ARM state variable register 8: alias for r11 */
38
39/* special register names */
40
41 DEF_ASM(sb) /* alias for r9 */
42 DEF_ASM(sl) /* alias for r10 */
25 DEF_ASM(fp) /* alias for r11 */43 DEF_ASM(fp) /* alias for r11 */
26 DEF_ASM(ip) /* alias for r12 */44 DEF_ASM(ip) /* alias for r12 */
27 DEF_ASM(sp) /* alias for r13 */45 DEF_ASM(sp) /* alias for r13 */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t