luau/CodeGen/include/Luau/AddressA64.h

57 lines
1.1 KiB
C
Raw Normal View History

2022-11-05 01:02:37 +08:00
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
#pragma once
#include "Luau/RegisterA64.h"
namespace Luau
{
namespace CodeGen
{
2023-03-03 21:45:38 +08:00
namespace A64
{
2022-11-05 01:02:37 +08:00
enum class AddressKindA64 : uint8_t
{
imm, // reg + imm
reg, // reg + reg
// TODO:
// reg + reg << shift
// reg + sext(reg) << shift
// reg + uext(reg) << shift
};
struct AddressA64
{
AddressA64(RegisterA64 base, int off = 0)
: kind(AddressKindA64::imm)
, base(base)
, offset(xzr)
, data(off)
{
2022-11-11 06:04:44 +08:00
LUAU_ASSERT(base.kind == KindA64::x || base == sp);
LUAU_ASSERT(off >= -256 && off < 4096);
2022-11-05 01:02:37 +08:00
}
AddressA64(RegisterA64 base, RegisterA64 offset)
: kind(AddressKindA64::reg)
, base(base)
, offset(offset)
, data(0)
{
LUAU_ASSERT(base.kind == KindA64::x);
LUAU_ASSERT(offset.kind == KindA64::x);
}
AddressKindA64 kind;
RegisterA64 base;
RegisterA64 offset;
int data;
};
2022-11-11 06:04:44 +08:00
using mem = AddressA64;
2023-03-03 21:45:38 +08:00
} // namespace A64
2022-11-05 01:02:37 +08:00
} // namespace CodeGen
} // namespace Luau