INSTR_STORE_FNC,
INSTR_STORE_ENT, /* should use I */
#if 0
- INSTR_STORE_ENT, /* integer type */
+ INSTR_STORE_I, /* integer type */
#endif
- INSTR_STORE_V, /* variant, should never be accessed */
+ INSTR_STORE_Q,
+ INSTR_STORE_M,
+
+ INSTR_STORE_M, /* variant, should never be accessed */
};
- INSTR_STOREP_V, /* variant, should never be accessed */
+ uint16_t type_store_instr[TYPE_COUNT] = {
+ INSTR_STOREP_F, /* should use I when having integer support */
+ INSTR_STOREP_S,
+ INSTR_STOREP_F,
+ INSTR_STOREP_V,
+ INSTR_STOREP_ENT,
+ INSTR_STOREP_FLD,
+ INSTR_STOREP_FNC,
+ INSTR_STOREP_ENT, /* should use I */
+ #if 0
+ INSTR_STOREP_ENT, /* integer type */
+ #endif
++ INSTR_STOREP_Q,
++ INSTR_STOREP_M,
++
++ INSTR_STOREP_M, /* variant, should never be accessed */
+ };
+
MEM_VEC_FUNCTIONS(ir_value_vector, ir_value*, v)
/***********************************************************************
*/
vtype = what->vtype;
- switch (vtype) {
- case TYPE_FLOAT:
- op = INSTR_STOREP_F;
- break;
- case TYPE_VECTOR:
- op = INSTR_STOREP_V;
- break;
- case TYPE_ENTITY:
- op = INSTR_STOREP_ENT;
- break;
- case TYPE_STRING:
- op = INSTR_STOREP_S;
- break;
- case TYPE_FIELD:
- op = INSTR_STOREP_FLD;
- break;
- #if 0
- case TYPE_INTEGER:
- op = INSTR_STOREP_I;
- break;
- #endif
- case TYPE_POINTER:
- #if 0
- op = INSTR_STOREP_I;
- #else
- op = INSTR_STOREP_ENT;
- #endif
- break;
- case TYPE_QUATERNION:
- op = INSTR_STOREP_Q;
- break;
- case TYPE_MATRIX:
- op = INSTR_STOREP_M;
- break;
- default:
- /* Unknown type */
- return false;
- }
+ op = type_storep_instr[vtype];
-
return ir_block_create_store_op(self, op, target, what);
}