xref: /aosp_15_r20/external/mesa3d/src/freedreno/afuc/asm.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2017 Rob Clark <[email protected]>
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef _ASM_H_
7 #define _ASM_H_
8 
9 #include <stdbool.h>
10 #include <stdint.h>
11 #include "afuc.h"
12 
13 extern int gpuver;
14 
15 struct asm_label {
16    unsigned offset;
17    const char *label;
18 };
19 
20 struct afuc_instr *next_instr(afuc_opc opc);
21 void decl_label(const char *str);
22 void decl_jumptbl(void);
23 void align_instr(unsigned alignment);
24 void next_section(void);
25 void parse_version(struct afuc_instr *instr);
26 
27 static inline uint32_t
parse_reg(const char * str)28 parse_reg(const char *str)
29 {
30    char *retstr;
31    long int ret;
32 
33    if (!strcmp(str, "$rem"))
34       return REG_REM;
35    else if (!strcmp(str, "$memdata"))
36       return REG_MEMDATA;
37    else if (!strcmp(str, "$addr"))
38       return REG_ADDR;
39    else if (!strcmp(str, "$regdata"))
40       return REG_REGDATA;
41    else if (!strcmp(str, "$usraddr"))
42       return REG_USRADDR;
43    else if (!strcmp(str, "$data"))
44       return 0x1f;
45    else if (!strcmp(str, "$sp"))
46       return REG_SP;
47    else if (!strcmp(str, "$lr"))
48       return REG_LR;
49 
50    ret = strtol(str + 1, &retstr, 16);
51 
52    if (*retstr != '\0') {
53       printf("invalid register: %s\n", str);
54       exit(2);
55    }
56 
57    return ret;
58 }
59 
60 static inline uint32_t
parse_literal(const char * str)61 parse_literal(const char *str)
62 {
63    char *retstr;
64    long int ret;
65 
66    ret = strtol(str + 1, &retstr, 16);
67 
68    if (*retstr != ']') {
69       printf("invalid literal: %s\n", str);
70       exit(2);
71    }
72 
73    return ret;
74 }
75 
76 static inline uint32_t
parse_bit(const char * str)77 parse_bit(const char *str)
78 {
79    return strtol(str + 1, NULL, 10);
80 }
81 
82 unsigned parse_control_reg(const char *name);
83 unsigned parse_sqe_reg(const char *name);
84 
85 void yyset_in(FILE *_in_str);
86 
87 #endif /* _ASM_H_ */
88