diff options
author | merry <git@mary.rs> | 2023-01-22 14:15:49 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-22 14:15:49 +0000 |
commit | 4f293f8cbec33e8edce81ad4980bd532a2464c05 (patch) | |
tree | 26bb07f90a3906ca2c500fe52e6c7cda436d1ffb /ARMeilleure/CodeGen/Arm64/CodeGenerator.cs | |
parent | 32a1cd83fd2e98d6f6da0b6c0b43c3af1323fca4 (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.cs | 14 |
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( |