[interpreter] Size reduction
[mono.git] / mcs / class / dlr / Runtime / Microsoft.Dynamic / Interpreter / Instructions / OrInstruction.cs
index baaad40fb7079ccc38bd0962e29607e853f1a141..03d89974eafc77f04a9e6ea9c091fb49be4fa6b0 100644 (file)
@@ -32,153 +32,108 @@ using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Utils;
 
 namespace Microsoft.Scripting.Interpreter {
-    internal abstract class OrInstruction : Instruction {
+    internal abstract class OrInstruction : AritmeticInstruction {
         private static Instruction _Int16, _Int32, _Int64, _UInt16, _UInt32, _UInt64, _Boolean;
         private static Instruction _Int16Lifted, _Int32Lifted, _Int64Lifted, _UInt16Lifted, _UInt32Lifted, _UInt64Lifted, _BooleanLifted;
 
-        public override int ConsumedStack { get { return 2; } }
-        public override int ProducedStack { get { return 1; } }
-
         private OrInstruction() {
         }
 
         internal sealed class OrInt32 : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = frame.Data[frame.StackIndex - 2];
-                var r = frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject((Int32)l | (Int32)r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return ScriptingRuntimeHelpers.Int32ToObject((Int32)l | (Int32)r);
             }
         }
 
         internal sealed class OrInt16 : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = frame.Data[frame.StackIndex - 2];
-                var r = frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (Int16)((Int16)l | (Int16)r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (Int16)((Int16)l | (Int16)r);
             }
         }
 
         internal sealed class OrInt64 : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = frame.Data[frame.StackIndex - 2];
-                var r = frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (Int64)((Int64)l | (Int64)r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (Int64)((Int64)l | (Int64)r);
             }
         }
 
         internal sealed class OrUInt16 : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = frame.Data[frame.StackIndex - 2];
-                var r = frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (UInt16)((UInt16)l | (UInt16)r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (UInt16)((UInt16)l | (UInt16)r);
             }
         }
 
         internal sealed class OrUInt32 : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = frame.Data[frame.StackIndex - 2];
-                var r = frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (UInt32)((UInt32)l | (UInt32)r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (UInt32)((UInt32)l | (UInt32)r);
             }
         }
 
         internal sealed class OrUInt64 : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = frame.Data[frame.StackIndex - 2];
-                var r = frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (UInt64)((UInt64)l | (UInt64)r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (UInt64)((UInt64)l | (UInt64)r);
             }
         }
 
         internal sealed class OrBoolean : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = frame.Data[frame.StackIndex - 2];
-                var r = frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (Boolean)((Boolean)l | (Boolean)r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (Boolean)((Boolean)l | (Boolean)r);
             }
         }
 
         internal sealed class OrInt32Lifted : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = (Int32?)frame.Data[frame.StackIndex - 2];
-                var r = (Int32?)frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (Int32?)(l | r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (Int32?)((Int32?)l | (Int32?)r);
             }
         }
 
         internal sealed class OrInt16Lifted : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = (Int16?)frame.Data[frame.StackIndex - 2];
-                var r = (Int16?)frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (Int16?)(l | r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (Int16?)((Int16?)l | (Int16?)r);
             }
         }
 
         internal sealed class OrInt64Lifted : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = (Int64?)frame.Data[frame.StackIndex - 2];
-                var r = (Int64?)frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (Int64?)(l | r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (Int64?)((Int64?)l | (Int64?)r);
             }
         }
 
         internal sealed class OrUInt16Lifted : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = (UInt16?)frame.Data[frame.StackIndex - 2];
-                var r = (UInt16?)frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (UInt16?)(l | r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (UInt16?)((Int16?)l | (Int16?)r);
             }
         }
 
         internal sealed class OrUInt32Lifted : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = (UInt32?)frame.Data[frame.StackIndex - 2];
-                var r = (UInt32?)frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (UInt32?)(l | r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (UInt32?)((UInt32?)l | (UInt32?)r);
             }
         }
 
         internal sealed class OrUInt64Lifted : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = (UInt64?)frame.Data[frame.StackIndex - 2];
-                var r = (UInt64?)frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (UInt64?)(l | r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (UInt64?)((UInt64?)l | (UInt64?)r);
             }
         }
 
         internal sealed class OrBooleanLifted : OrInstruction {
-            public override int Run(InterpretedFrame frame) {
-                var l = (Boolean?)frame.Data[frame.StackIndex - 2];
-                var r = (Boolean?)frame.Data[frame.StackIndex - 1];
-                frame.Data[frame.StackIndex - 2] = (Boolean?)(l | r);
-                frame.StackIndex--;
-                return 1;
+            protected override object Calculate (object l, object r)
+            {
+                return (Boolean?)((Boolean?)l | (Boolean?)r);
             }
         }