|
7 | 7 | #include <stdarg.h> |
8 | 8 | #include <stdio.h> |
9 | 9 |
|
10 | | -LUAU_FASTFLAG(LuauCodegenUpvalueLoadProp2) |
11 | | -LUAU_FASTFLAG(LuauCodegenSplitFloat) |
12 | | -LUAU_FASTFLAG(LuauCodegenLocationEndFix) |
13 | | -LUAU_FASTFLAG(LuauCodegenUintToFloat) |
| 10 | +LUAU_FASTFLAG(LuauCodegenA64ClosureOffset) |
14 | 11 |
|
15 | 12 | namespace Luau |
16 | 13 | { |
@@ -1032,23 +1029,13 @@ void AssemblyBuilderA64::scvtf(RegisterA64 dst, RegisterA64 src) |
1032 | 1029 |
|
1033 | 1030 | void AssemblyBuilderA64::ucvtf(RegisterA64 dst, RegisterA64 src) |
1034 | 1031 | { |
1035 | | - if (FFlag::LuauCodegenUintToFloat) |
1036 | | - { |
1037 | | - CODEGEN_ASSERT(dst.kind == KindA64::d || dst.kind == KindA64::s); |
1038 | | - CODEGEN_ASSERT(src.kind == KindA64::w || src.kind == KindA64::x); |
1039 | | - |
1040 | | - if (dst.kind == KindA64::d) |
1041 | | - placeR1("ucvtf", dst, src, 0b000'11110'01'1'00'011'000000); |
1042 | | - else |
1043 | | - placeR1("ucvtf", dst, src, 0b000'11110'00'1'00'011'000000); |
1044 | | - } |
1045 | | - else |
1046 | | - { |
1047 | | - CODEGEN_ASSERT(dst.kind == KindA64::d); |
1048 | | - CODEGEN_ASSERT(src.kind == KindA64::w || src.kind == KindA64::x); |
| 1032 | + CODEGEN_ASSERT(dst.kind == KindA64::d || dst.kind == KindA64::s); |
| 1033 | + CODEGEN_ASSERT(src.kind == KindA64::w || src.kind == KindA64::x); |
1049 | 1034 |
|
| 1035 | + if (dst.kind == KindA64::d) |
1050 | 1036 | placeR1("ucvtf", dst, src, 0b000'11110'01'1'00'011'000000); |
1051 | | - } |
| 1037 | + else |
| 1038 | + placeR1("ucvtf", dst, src, 0b000'11110'00'1'00'011'000000); |
1052 | 1039 | } |
1053 | 1040 |
|
1054 | 1041 | void AssemblyBuilderA64::fjcvtzs(RegisterA64 dst, RegisterA64 src) |
@@ -1168,7 +1155,7 @@ uint32_t AssemblyBuilderA64::getCodeSize() const |
1168 | 1155 |
|
1169 | 1156 | unsigned AssemblyBuilderA64::getInstructionCount() const |
1170 | 1157 | { |
1171 | | - return FFlag::LuauCodegenLocationEndFix ? unsigned(getCodeSize()) : unsigned(getCodeSize()) / 4; |
| 1158 | + return unsigned(getCodeSize()); |
1172 | 1159 | } |
1173 | 1160 |
|
1174 | 1161 | bool AssemblyBuilderA64::isMaskSupported(uint32_t mask) |
@@ -1298,11 +1285,20 @@ void AssemblyBuilderA64::placeA(const char* name, RegisterA64 dst, AddressA64 sr |
1298 | 1285 | break; |
1299 | 1286 | case AddressKindA64::imm: |
1300 | 1287 | if (unsigned(src.data >> sizelog) < 1024 && (src.data & ((1 << sizelog) - 1)) == 0) |
| 1288 | + { |
1301 | 1289 | place(dst.index | (src.base.index << 5) | ((src.data >> sizelog) << 10) | (opsize << 22) | (1 << 24)); |
| 1290 | + } |
1302 | 1291 | else if (src.data >= -256 && src.data <= 255) |
| 1292 | + { |
1303 | 1293 | place(dst.index | (src.base.index << 5) | ((src.data & ((1 << 9) - 1)) << 12) | (opsize << 22)); |
| 1294 | + } |
1304 | 1295 | else |
| 1296 | + { |
| 1297 | + if (FFlag::LuauCodegenA64ClosureOffset) |
| 1298 | + overflowed = true; |
| 1299 | + |
1305 | 1300 | CODEGEN_ASSERT(!"Unable to encode large immediate offset"); |
| 1301 | + } |
1306 | 1302 | break; |
1307 | 1303 | case AddressKindA64::pre: |
1308 | 1304 | CODEGEN_ASSERT(src.data >= -256 && src.data <= 255); |
|
0 commit comments