* PEAPI.cs: Add proper support for short instructions, removing
authorJackson Harper <jackson@novell.com>
Sat, 18 Oct 2003 15:44:44 +0000 (15:44 -0000)
committerJackson Harper <jackson@novell.com>
Sat, 18 Oct 2003 15:44:44 +0000 (15:44 -0000)
PEAPI's auto selection of short/long branch operations
feature.

svn path=/trunk/mcs/; revision=19163

mcs/class/PEAPI/ChangeLog
mcs/class/PEAPI/PEAPI.cs

index b5af65b23781301d402e3c31a3b4406d8659a2b1..d2cf235a81c04c05544acaafe1421f580b2b672c 100644 (file)
@@ -1,3 +1,8 @@
+2003-10-18 Jackson Harper <jackson@ximian.com>
+
+       * PEAPI.cs: Add proper support for short instructions, removing
+       PEAPI's auto selection of short/long branch operations feature.
+       
 2003-10-10 Jackson Harper <jackson@ximian.com>
 
        * PEAPI.cs: New GenericMethodSig class for creating generic method
index 32a28ebd4779141a91faf5985cba2e51b8241ffa..ba79a5be933e03ad5fe259a5aa33671c9aca0488 100644 (file)
@@ -643,8 +643,15 @@ namespace PEAPI
   /// <summary>\r
   /// CIL branch instructions\r
   /// </summary>\r
-  public enum BranchOp {br = 0x2B, brfalse, brtrue, beq, bge, bgt, ble, blt,\r
-    bne_un, bge_un, bgt_un, ble_un, blt_un, leave = 0xDE }\r
+  public enum BranchOp {
+          // short branches
+          br_s = 0x2B, brfalse_s, brtrue_s, beq_s, bge_s, bgt_s,
+          ble_s, blt_s, bne_un_s, bge_un_s, bgt_un_s, ble_un_s, blt_un_s,
+          // long branches
+          br = 0x38, brfalse, brtrue, beq, bge, bgt, ble, blt,\r
+          bne_un, bge_un, bgt_un, ble_un, blt_un,
+
+          leave = 0xDD, leave_s }\r
 \r
   /// <summary>\r
   /// Index for all the tables in the meta data\r
@@ -3940,20 +3947,18 @@ if (rsrc != null)
       dest = dst;\r
       dest.AddBranch(this);\r
       size++;\r
+
+      if (inst >= (int) BranchOp.br && inst != (int) BranchOp.leave_s) {
+              shortVer = false;
+              size += 3;
+      }
     }\r
 \r
     internal sealed override bool Check(MetaData md) {\r
       target = (int)dest.GetLabelOffset() - (int)(offset + size);\r
-      if (shortVer && ((target < minByteVal) || (target > maxByteVal))) {\r
-        if (instr < (int)BranchOp.leave) instr += longInstrOffset;\r
-        else instr--;\r
-        shortVer = false;\r
-        size += 3;\r
-        return true;\r
-      }\r
-      return false;\r
+      return false;
     }\r
-\r
+
                 internal sealed override void Write(FileImage output) {\r
                         base.Write(output);\r
                         if (shortVer)\r