diff options
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( |