mirror of
https://github.com/luau-lang/luau.git
synced 2025-01-05 19:09:11 +00:00
ba67fb275e
* `table.sort` was improved further. It now guarentees N*log(N) time complexity in the worst case. * Fix https://github.com/Roblox/luau/issues/880 We are also working on fixing final bugs and crashes in the new type solver. On the CodeGen front we have a few things going on: * We have a smarter register allocator for the x86 JIT * We lower more instructions on arm64 * The vector constructor builtin is now translated to IR --------- Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
68 lines
4 KiB
C++
68 lines
4 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "ltm.h"
|
|
|
|
typedef uint32_t Instruction;
|
|
|
|
namespace Luau
|
|
{
|
|
namespace CodeGen
|
|
{
|
|
|
|
enum class IrCondition : uint8_t;
|
|
struct IrOp;
|
|
struct IrBuilder;
|
|
enum class IrCmd : uint8_t;
|
|
|
|
void translateInstLoadNil(IrBuilder& build, const Instruction* pc);
|
|
void translateInstLoadB(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstLoadN(IrBuilder& build, const Instruction* pc);
|
|
void translateInstLoadK(IrBuilder& build, const Instruction* pc);
|
|
void translateInstLoadKX(IrBuilder& build, const Instruction* pc);
|
|
void translateInstMove(IrBuilder& build, const Instruction* pc);
|
|
void translateInstJump(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstJumpBack(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstJumpIf(IrBuilder& build, const Instruction* pc, int pcpos, bool not_);
|
|
void translateInstJumpIfEq(IrBuilder& build, const Instruction* pc, int pcpos, bool not_);
|
|
void translateInstJumpIfCond(IrBuilder& build, const Instruction* pc, int pcpos, IrCondition cond);
|
|
void translateInstJumpX(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstJumpxEqNil(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstJumpxEqB(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstJumpxEqN(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstJumpxEqS(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstBinary(IrBuilder& build, const Instruction* pc, int pcpos, TMS tm);
|
|
void translateInstBinaryK(IrBuilder& build, const Instruction* pc, int pcpos, TMS tm);
|
|
void translateInstNot(IrBuilder& build, const Instruction* pc);
|
|
void translateInstMinus(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstLength(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstNewTable(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstDupTable(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstGetUpval(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstSetUpval(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstCloseUpvals(IrBuilder& build, const Instruction* pc);
|
|
void translateFastCallN(IrBuilder& build, const Instruction* pc, int pcpos, bool customParams, int customParamCount, IrOp customArgs, IrOp next);
|
|
void translateInstForNPrep(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstForNLoop(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstForGPrepNext(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstForGPrepInext(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstForGLoopIpairs(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstGetTableN(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstSetTableN(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstGetTable(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstSetTable(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstGetImport(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstGetTableKS(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstSetTableKS(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstGetGlobal(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstSetGlobal(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstConcat(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstCapture(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstNamecall(IrBuilder& build, const Instruction* pc, int pcpos);
|
|
void translateInstAndX(IrBuilder& build, const Instruction* pc, int pcpos, IrOp c);
|
|
void translateInstOrX(IrBuilder& build, const Instruction* pc, int pcpos, IrOp c);
|
|
|
|
} // namespace CodeGen
|
|
} // namespace Luau
|