xref: /aosp_15_r20/external/mesa3d/src/freedreno/afuc/isa.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2020 Google, Inc.
3*61046927SAndroid Build Coastguard Worker  * Copyright © 2023 Valve Corporation
4*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
5*61046927SAndroid Build Coastguard Worker  */
6*61046927SAndroid Build Coastguard Worker 
7*61046927SAndroid Build Coastguard Worker #ifndef _ISA_H_
8*61046927SAndroid Build Coastguard Worker #define _ISA_H_
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker #include "compiler/isaspec/isaspec.h"
13*61046927SAndroid Build Coastguard Worker #include "afuc.h"
14*61046927SAndroid Build Coastguard Worker 
__instruction_create(afuc_opc opc)15*61046927SAndroid Build Coastguard Worker static inline struct afuc_instr *__instruction_create(afuc_opc opc)
16*61046927SAndroid Build Coastguard Worker {
17*61046927SAndroid Build Coastguard Worker    struct afuc_instr *instr = calloc(1, sizeof(struct afuc_instr));
18*61046927SAndroid Build Coastguard Worker 
19*61046927SAndroid Build Coastguard Worker    switch (opc) {
20*61046927SAndroid Build Coastguard Worker #define ALU(name) \
21*61046927SAndroid Build Coastguard Worker    case OPC_##name##I: \
22*61046927SAndroid Build Coastguard Worker       instr->opc = OPC_##name; \
23*61046927SAndroid Build Coastguard Worker       instr->has_immed = true; \
24*61046927SAndroid Build Coastguard Worker       break;
25*61046927SAndroid Build Coastguard Worker    ALU(ADD)
26*61046927SAndroid Build Coastguard Worker    ALU(ADDHI)
27*61046927SAndroid Build Coastguard Worker    ALU(SUB)
28*61046927SAndroid Build Coastguard Worker    ALU(SUBHI)
29*61046927SAndroid Build Coastguard Worker    ALU(AND)
30*61046927SAndroid Build Coastguard Worker    ALU(OR)
31*61046927SAndroid Build Coastguard Worker    ALU(XOR)
32*61046927SAndroid Build Coastguard Worker    ALU(NOT)
33*61046927SAndroid Build Coastguard Worker    ALU(SHL)
34*61046927SAndroid Build Coastguard Worker    ALU(USHR)
35*61046927SAndroid Build Coastguard Worker    ALU(ISHR)
36*61046927SAndroid Build Coastguard Worker    ALU(ROT)
37*61046927SAndroid Build Coastguard Worker    ALU(MUL8)
38*61046927SAndroid Build Coastguard Worker    ALU(MIN)
39*61046927SAndroid Build Coastguard Worker    ALU(MAX)
40*61046927SAndroid Build Coastguard Worker    ALU(CMP)
41*61046927SAndroid Build Coastguard Worker #undef ALU
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker    default:
44*61046927SAndroid Build Coastguard Worker       instr->opc = opc;
45*61046927SAndroid Build Coastguard Worker    }
46*61046927SAndroid Build Coastguard Worker 
47*61046927SAndroid Build Coastguard Worker    return instr;
48*61046927SAndroid Build Coastguard Worker }
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker #endif /* _ISA_H_ */
51