aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs
diff options
context:
space:
mode:
authormerry <git@mary.rs>2023-01-22 14:15:49 +0000
committerGitHub <noreply@github.com>2023-01-22 14:15:49 +0000
commit4f293f8cbec33e8edce81ad4980bd532a2464c05 (patch)
tree26bb07f90a3906ca2c500fe52e6c7cda436d1ffb /ARMeilleure/CodeGen/Arm64/CodeGenerator.cs
parent32a1cd83fd2e98d6f6da0b6c0b43c3af1323fca4 (diff)
Arm64: Simplify TryEncodeBitMask and use for constants (#4328)1.1.590
* Arm64: Simplify TryEncodeBitMask * CodeGenerator: Use TryEncodeBitMask in GenerateConstantCopy * Ptc: Bump version
Diffstat (limited to 'ARMeilleure/CodeGen/Arm64/CodeGenerator.cs')
-rw-r--r--ARMeilleure/CodeGen/Arm64/CodeGenerator.cs14
1 files changed, 9 insertions, 5 deletions
diff --git a/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs b/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs
index 704aa45a..fc4fa976 100644
--- a/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs
+++ b/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs
@@ -1303,7 +1303,15 @@ namespace ARMeilleure.CodeGen.Arm64
private static void GenerateConstantCopy(CodeGenContext context, Operand dest, ulong value)
{
- if (value != 0)
+ if (value == 0)
+ {
+ context.Assembler.Mov(dest, Register(ZrRegister, dest.Type));
+ }
+ else if (CodeGenCommon.TryEncodeBitMask(dest.Type, value, out _, out _, out _))
+ {
+ context.Assembler.Orr(dest, Register(ZrRegister, dest.Type), Const(dest.Type, (long)value));
+ }
+ else
{
int hw = 0;
bool first = true;
@@ -1328,10 +1336,6 @@ namespace ARMeilleure.CodeGen.Arm64
value >>= 16;
}
}
- else
- {
- context.Assembler.Mov(dest, Register(ZrRegister, dest.Type));
- }
}
private static void GenerateAtomicCas(