12 struct ast_expression;
19 fold(parser_t *parser);
22 bool generate(ir_builder *ir);
23 ast_expression *op(const oper_info *info, ast_expression **opexprs);
24 ast_expression *intrinsic(const char *intrinsic, ast_expression **arg);
26 static int cond_ternary(ir_value *condval, ast_function *func, ast_ternary *branch);
27 static int cond_ifthen(ir_value *condval, ast_function *func, ast_ifthen *branch);
29 static ast_expression *superfluous(ast_expression *left, ast_expression *right, int op);
30 static ast_expression *binary(lex_ctx_t ctx, int op, ast_expression *left, ast_expression *right);
32 ast_expression *constgen_float(qcfloat_t value, bool inexact);
33 ast_expression *constgen_vector(vec3_t value);
34 ast_expression *constgen_string(const char *str, bool translate);
35 ast_expression *constgen_string(const std::string &str, bool translate);
37 ast_value *imm_float(size_t index) const { return m_imm_float[index]; }
38 ast_value *imm_vector(size_t index) const { return m_imm_vector[index]; }
41 static qcfloat_t immvalue_float(ast_value *value);
42 static vec3_t immvalue_vector(ast_value *value);
43 static const char *immvalue_string(ast_value *value);
47 bool immediate_true(ast_value *v);
49 bool check_except_float_impl(void (*callback)(void), ast_value *a, ast_value *b);
50 bool check_inexact_float(ast_value *a, ast_value *b);
52 ast_expression *op_mul_vec(vec3_t vec, ast_value *sel, const char *set);
53 ast_expression *op_neg(ast_value *a);
54 ast_expression *op_not(ast_value *a);
55 ast_expression *op_add(ast_value *a, ast_value *b);
56 ast_expression *op_sub(ast_value *a, ast_value *b);
57 ast_expression *op_mul(ast_value *a, ast_value *b);
58 ast_expression *op_div(ast_value *a, ast_value *b);
59 ast_expression *op_mod(ast_value *a, ast_value *b);
60 ast_expression *op_bor(ast_value *a, ast_value *b);
61 ast_expression *op_band(ast_value *a, ast_value *b);
62 ast_expression *op_xor(ast_value *a, ast_value *b);
63 ast_expression *op_lshift(ast_value *a, ast_value *b);
64 ast_expression *op_rshift(ast_value *a, ast_value *b);
65 ast_expression *op_andor(ast_value *a, ast_value *b, float expr);
66 ast_expression *op_tern(ast_value *a, ast_value *b, ast_value *c);
67 ast_expression *op_exp(ast_value *a, ast_value *b);
68 ast_expression *op_lteqgt(ast_value *a, ast_value *b);
69 ast_expression *op_ltgt(ast_value *a, ast_value *b, bool lt);
70 ast_expression *op_cmp(ast_value *a, ast_value *b, bool ne);
71 ast_expression *op_bnot(ast_value *a);
72 ast_expression *op_cross(ast_value *a, ast_value *b);
73 ast_expression *op_length(ast_value *a);
75 ast_expression *intrinsic_isfinite(ast_value *a);
76 ast_expression *intrinsic_isinf(ast_value *a);
77 ast_expression *intrinsic_isnan(ast_value *a);
78 ast_expression *intrinsic_isnormal(ast_value *a);
79 ast_expression *intrinsic_signbit(ast_value *a);
80 ast_expression *intrinsic_acosh(ast_value *a);
81 ast_expression *intrinsic_asinh(ast_value *a);
82 ast_expression *intrinsic_atanh(ast_value *a);
83 ast_expression *intrinsic_exp(ast_value *a);
84 ast_expression *intrinsic_exp2(ast_value *a);
85 ast_expression *intrinsic_expm1(ast_value *a);
86 ast_expression *intrinsic_mod(ast_value *lhs, ast_value *rhs);
87 ast_expression *intrinsic_pow(ast_value *lhs, ast_value *rhs);
88 ast_expression *intrinsic_fabs(ast_value *a);
90 static qcfloat_t immvalue_float(ir_value *value);
91 static vec3_t immvalue_vector(ir_value *value);
93 static int cond(ir_value *condval, ast_function *func, ast_ifthen *branch);
98 std::vector<ast_value*> m_imm_float;
99 std::vector<ast_value*> m_imm_vector;
100 std::vector<ast_value*> m_imm_string;
101 hash_table_t *m_imm_string_untranslate; /* map<string, ast_value*> */
102 hash_table_t *m_imm_string_dotranslate; /* map<string, ast_value*> */