X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=intrin.cpp;h=ebdacd9433cc2071c7d14e2bdbc4659af66c5618;hp=e55cf0ff5546d639554e8f00a79cfad7f2e1b709;hb=566e7615466c776fc296b67894621a85691cd42b;hpb=db9c37d18bcced1c3b0f1421044155b1d88f0b25 diff --git a/intrin.cpp b/intrin.cpp index e55cf0f..ebdacd9 100644 --- a/intrin.cpp +++ b/intrin.cpp @@ -8,7 +8,7 @@ lex_ctx_t intrin::ctx() const { return parser_ctx(m_parser); } -ast_function *intrin::value(ast_value **out, const char *name, qcint_t vtype) { +ast_function *intrin::value(ast_value **out, const char *name, qc_type vtype) { ast_value *value = nullptr; ast_function *func = nullptr; char buffer[1024]; @@ -19,9 +19,9 @@ ast_function *intrin::value(ast_value **out, const char *name, qcint_t vtype) { value = ast_value_new(ctx(), buffer, TYPE_FUNCTION); value->intrinsic = true; - value->expression.next = (ast_expression*)ast_value_new(ctx(), stype, vtype); + value->next = (ast_expression*)ast_value_new(ctx(), stype, vtype); func = ast_function_new(ctx(), buffer, value); - value->expression.flags |= AST_FLAG_ERASEABLE; + value->flags |= AST_FLAG_ERASEABLE; *out = value; return func; @@ -55,7 +55,7 @@ ast_expression *intrin::isfinite_() { ast_block *block = ast_block_new(ctx()); /* float x; */ - val->expression.params.push_back(x); + val->type_params.push_back(x); /* = isnan(x); */ callisnan->params.push_back((ast_expression*)x); @@ -80,7 +80,7 @@ ast_expression *intrin::isfinite_() { ) ); - func->blocks.push_back(block); + func->blocks.emplace_back(block); reg(val, func); return (ast_expression*)val;; @@ -124,8 +124,8 @@ ast_expression *intrin::isinf_() { ) ); - val->expression.params.push_back(x); - func->blocks.push_back(body); + val->type_params.push_back(x); + func->blocks.emplace_back(body); reg(val, func); @@ -169,8 +169,8 @@ ast_expression *intrin::isnan_() { ) ); - val->expression.params.push_back(arg1); - func->blocks.push_back(body); + val->type_params.push_back(arg1); + func->blocks.emplace_back(body); reg(val, func); @@ -189,7 +189,7 @@ ast_expression *intrin::isnormal_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "isnormal", TYPE_FLOAT); - val->expression.params.push_back(x); + val->type_params.push_back(x); callisfinite->params.push_back((ast_expression*)x); /* return */ @@ -200,7 +200,7 @@ ast_expression *intrin::isnormal_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -216,7 +216,7 @@ ast_expression *intrin::signbit_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "signbit", TYPE_FLOAT); - val->expression.params.push_back(x); + val->type_params.push_back(x); /* return (x < 0); */ body->exprs.push_back( @@ -236,7 +236,7 @@ ast_expression *intrin::signbit_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -254,7 +254,7 @@ ast_expression *intrin::acosh_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "acosh", TYPE_FLOAT); - val->expression.params.push_back(x); + val->type_params.push_back(x); /* = sqrt((x * x) - 1); */ callsqrt->params.push_back( @@ -289,7 +289,7 @@ ast_expression *intrin::acosh_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -307,7 +307,7 @@ ast_expression *intrin::asinh_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "asinh", TYPE_FLOAT); - val->expression.params.push_back(x); + val->type_params.push_back(x); /* = sqrt((x * x) + 1); */ callsqrt->params.push_back( @@ -342,7 +342,7 @@ ast_expression *intrin::asinh_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -359,7 +359,7 @@ ast_expression *intrin::atanh_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "atanh", TYPE_FLOAT); - val->expression.params.push_back(x); + val->type_params.push_back(x); /* = log((1 + x) / (1 - x)); */ calllog->params.push_back( @@ -391,7 +391,7 @@ ast_expression *intrin::atanh_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -416,7 +416,7 @@ ast_expression *intrin::exp_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "exp", TYPE_FLOAT); - val->expression.params.push_back(x); + val->type_params.push_back(x); body->locals.push_back(sum); body->locals.push_back(acc); @@ -504,7 +504,7 @@ ast_expression *intrin::exp_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -521,7 +521,7 @@ ast_expression *intrin::exp2_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "exp2", TYPE_FLOAT); - val->expression.params.push_back(arg1); + val->type_params.push_back(arg1); callpow->params.push_back((ast_expression*)m_fold->m_imm_float[3]); callpow->params.push_back((ast_expression*)arg1); @@ -534,7 +534,7 @@ ast_expression *intrin::exp2_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -551,7 +551,7 @@ ast_expression *intrin::expm1_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "expm1", TYPE_FLOAT); - val->expression.params.push_back(x); + val->type_params.push_back(x); /* = exp(x); */ callexp->params.push_back((ast_expression*)x); @@ -569,7 +569,7 @@ ast_expression *intrin::expm1_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -659,8 +659,8 @@ ast_expression *intrin::pow_() { body->locals.push_back(accumulate); body->locals.push_back(mid); - val->expression.params.push_back(base); - val->expression.params.push_back(exp); + val->type_params.push_back(base); + val->type_params.push_back(exp); /* * if (exp == 0.0) @@ -1014,7 +1014,7 @@ ast_expression *intrin::pow_() { ); /* } */ - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -1036,8 +1036,8 @@ ast_expression *intrin::mod_() { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, "mod", TYPE_FLOAT); - val->expression.params.push_back(a); - val->expression.params.push_back(b); + val->type_params.push_back(a); + val->type_params.push_back(b); body->locals.push_back(div); body->locals.push_back(sign); @@ -1110,7 +1110,7 @@ ast_expression *intrin::mod_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -1147,9 +1147,9 @@ ast_expression *intrin::fabs_() { ) ); - val->expression.params.push_back(arg1); + val->type_params.push_back(arg1); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -1221,7 +1221,7 @@ ast_expression *intrin::epsilon_() { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -1261,7 +1261,7 @@ ast_expression *intrin::nan_() { ) ); - func->blocks.push_back(block); + func->blocks.emplace_back(block); reg(val, func); return (ast_expression*)val; } @@ -1308,7 +1308,7 @@ ast_expression *intrin::inf_() { ) ); - func->blocks.push_back(block); + func->blocks.emplace_back(block); reg(val, func); return (ast_expression*)val; } @@ -1406,8 +1406,8 @@ ast_expression *intrin::ln_() { ast_function *func = value(&val, "ln", TYPE_FLOAT); size_t i; - val->expression.params.push_back(power); - val->expression.params.push_back(base); + val->type_params.push_back(power); + val->type_params.push_back(base); block->locals.push_back(whole); block->locals.push_back(nth); @@ -1852,7 +1852,7 @@ ast_expression *intrin::ln_() { ) ); - func->blocks.push_back(block); + func->blocks.emplace_back(block); reg(val, func); return (ast_expression*)val; } @@ -1864,7 +1864,7 @@ ast_expression *intrin::log_variant(const char *name, float base) { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, name, TYPE_FLOAT); - val->expression.params.push_back(arg1); + val->type_params.push_back(arg1); callln->params.push_back((ast_expression*)arg1); callln->params.push_back((ast_expression*)m_fold->constgen_float(base, false)); @@ -1876,7 +1876,7 @@ ast_expression *intrin::log_variant(const char *name, float base) { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -1908,8 +1908,8 @@ ast_expression *intrin::shift_variant(const char *name, size_t instr) { ast_block *body = ast_block_new(ctx()); ast_function *func = value(&val, name, TYPE_FLOAT); - val->expression.params.push_back(a); - val->expression.params.push_back(b); + val->type_params.push_back(a); + val->type_params.push_back(b); /* = pow(2, b) */ callpow->params.push_back((ast_expression*)m_fold->m_imm_float[3]); @@ -1933,7 +1933,7 @@ ast_expression *intrin::shift_variant(const char *name, size_t instr) { ) ); - func->blocks.push_back(body); + func->blocks.emplace_back(body); reg(val, func); return (ast_expression*)val; } @@ -2025,7 +2025,7 @@ ast_expression *intrin::func_try(size_t offset, const char *compare) { ast_expression *intrin::func_self(const char *name, const char *from) { ast_expression *find; /* try current first */ - if ((find = parser_find_global(m_parser, name)) && ((ast_value*)find)->expression.vtype == TYPE_FUNCTION) + if ((find = parser_find_global(m_parser, name)) && ((ast_value*)find)->vtype == TYPE_FUNCTION) for (auto &it : m_parser->functions) if (((ast_value*)find)->name && !strcmp(it->name, ((ast_value*)find)->name) && it->builtin < 0) return find;