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 Workerstatic 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