]> granicus.if.org Git - yasm/commitdiff
Don't compact into a short form if one's not available.
authorPeter Johnson <peter@tortall.net>
Fri, 11 Jan 2002 07:26:45 +0000 (07:26 -0000)
committerPeter Johnson <peter@tortall.net>
Fri, 11 Jan 2002 07:26:45 +0000 (07:26 -0000)
svn path=/trunk/yasm/; revision=461

modules/arch/x86/x86bc.c
src/arch/x86/x86bc.c

index 3c9ae78908581bcc464942efaa6d104c334a9e2f..069980502b4f0ea7f064b8e268d16e7f0bb56f68 100644 (file)
@@ -579,7 +579,7 @@ x86_bc_calc_len_jmprel(x86_jmprel *jmprel, unsigned long *len,
     unsigned long target;
     long rel;
     unsigned char opersize;
-    int jrshort = 1;
+    int jrshort = 0;
 
     /* As opersize may be 0, figure out its "real" value. */
     opersize = (jmprel->opersize == 0) ? jmprel->mode_bits :
@@ -611,13 +611,17 @@ x86_bc_calc_len_jmprel(x86_jmprel *jmprel, unsigned long *len,
                target = intnum_get_uint(num);
                rel = (long)(target-offset);
                /* short displacement must fit within -128 <= rel <= +127 */
-               if (rel >= -128 && rel <= 127) {
+               if (jmprel->shortop.opcode_len != 0 && rel >= -128 &&
+                   rel <= 127) {
                    /* It fits into a short displacement. */
                    jrshort = 1;
                } else {
-                   /* Near for now, but could get shorter in the future. */
+                   /* Near for now, but could get shorter in the future if
+                    * there's a short form available.
+                    */
                    jrshort = 0;
-                   retval = 0;
+                   if (jmprel->shortop.opcode_len != 0)
+                       retval = 0;
                }
            } else {
                /* Assume whichever size is claimed as default by op_sel */
index 3c9ae78908581bcc464942efaa6d104c334a9e2f..069980502b4f0ea7f064b8e268d16e7f0bb56f68 100644 (file)
@@ -579,7 +579,7 @@ x86_bc_calc_len_jmprel(x86_jmprel *jmprel, unsigned long *len,
     unsigned long target;
     long rel;
     unsigned char opersize;
-    int jrshort = 1;
+    int jrshort = 0;
 
     /* As opersize may be 0, figure out its "real" value. */
     opersize = (jmprel->opersize == 0) ? jmprel->mode_bits :
@@ -611,13 +611,17 @@ x86_bc_calc_len_jmprel(x86_jmprel *jmprel, unsigned long *len,
                target = intnum_get_uint(num);
                rel = (long)(target-offset);
                /* short displacement must fit within -128 <= rel <= +127 */
-               if (rel >= -128 && rel <= 127) {
+               if (jmprel->shortop.opcode_len != 0 && rel >= -128 &&
+                   rel <= 127) {
                    /* It fits into a short displacement. */
                    jrshort = 1;
                } else {
-                   /* Near for now, but could get shorter in the future. */
+                   /* Near for now, but could get shorter in the future if
+                    * there's a short form available.
+                    */
                    jrshort = 0;
-                   retval = 0;
+                   if (jmprel->shortop.opcode_len != 0)
+                       retval = 0;
                }
            } else {
                /* Assume whichever size is claimed as default by op_sel */