From 9532b1d6739418e9700deb47ab2d1470ca1b3412 Mon Sep 17 00:00:00 2001 From: Xytabich Date: Thu, 18 Nov 2021 00:28:10 +0300 Subject: [PATCH] small switch optimization --- Assets/Katsudon/Builder/Opcodes/SwitchOpcode.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Assets/Katsudon/Builder/Opcodes/SwitchOpcode.cs b/Assets/Katsudon/Builder/Opcodes/SwitchOpcode.cs index 0e2ac05..7d64b9f 100644 --- a/Assets/Katsudon/Builder/Opcodes/SwitchOpcode.cs +++ b/Assets/Katsudon/Builder/Opcodes/SwitchOpcode.cs @@ -1,4 +1,5 @@ -using System.Reflection.Emit; +using System; +using System.Reflection.Emit; using Katsudon.Builder.Externs; namespace Katsudon.Builder.AsmOpCodes @@ -18,9 +19,12 @@ bool IOperationBuider.Process(IMethodDescriptor method) IVariable condition = null; indexVariable.Allocate(); - CgeOpcode.ProcessOp(method, null, indexVariable, method.machine.GetConstVariable(0), - () => (condition = method.GetTmpVariable(typeof(bool))), out condition); - method.machine.AddBranch(condition, outLabel); + if(!NumberCodeUtils.IsUnsigned(Type.GetTypeCode(indexVariable.type))) + { + CgeOpcode.ProcessOp(method, null, indexVariable, method.machine.GetConstVariable(0), + () => (condition = method.GetTmpVariable(typeof(bool))), out condition); + method.machine.AddBranch(condition, outLabel); + } var addressVariable = method.GetTmpVariable(typeof(uint)).Reserve(); method.machine.AddExtern(ConvertExtension.GetExternName(typeof(object), typeof(uint)), addressVariable, indexVariable.OwnType());