PATCH: Use FRAG_APPEND_1_CHAR in x86 assembler

H.J. Lu hjl@lucon.org
Mon Dec 17 18:51:00 GMT 2007


X86 assembler has codes like

  p = frag_more (1);
  md_number_to_chars (p, val, 1);

They can be replaced by

  FRAG_APPEND_1_CHAR (val);

Also, md_short_jump_size, md_long_jump_size, md_create_short_jump and
md_create_long_jump are only used when WORKING_DOT_WORD isn't
defined. WORKING_DOT_WORD is defined in config/tc-i386.h since
2007-03-09. I am checking in this patch to simply x86 assembler.


H.J.
---
2007-12-17  H.J. Lu  <hongjiu.lu@intel.com>

	* config/tc-i386.c (output_insn): Use FRAG_APPEND_1_CHAR
	instead of frag_more/md_number_to_chars.
	(md_short_jump_size): Removed.
	(md_long_jump_size): Likewise.
	(md_create_short_jump): Likewise.
	(md_create_long_jump): Likewise.

--- gas/config/tc-i386.c.byte	2007-11-09 11:30:57.000000000 -0800
+++ gas/config/tc-i386.c	2007-12-17 10:41:38.000000000 -0800
@@ -5000,10 +5000,7 @@ check_prefix:
 	   q++)
 	{
 	  if (*q)
-	    {
-	      p = frag_more (1);
-	      md_number_to_chars (p, (valueT) *q, 1);
-	    }
+	    FRAG_APPEND_1_CHAR (*q);
 	}
 
       /* Now the opcode; be careful about word order here!  */
@@ -5042,12 +5039,9 @@ check_prefix:
       /* Now the modrm byte and sib byte (if present).  */
       if (i.tm.opcode_modifier.modrm)
 	{
-	  p = frag_more (1);
-	  md_number_to_chars (p,
-			      (valueT) (i.rm.regmem << 0
-					| i.rm.reg << 3
-					| i.rm.mode << 6),
-			      1);
+	  FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
+			       | i.rm.reg << 3
+			       | i.rm.mode << 6));
 	  /* If i.rm.regmem == ESP (4)
 	     && i.rm.mode != (Register mode)
 	     && not 16 bit
@@ -5055,14 +5049,9 @@ check_prefix:
 	  if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
 	      && i.rm.mode != 3
 	      && !(i.base_reg && i.base_reg->reg_type.bitfield.reg16))
-	    {
-	      p = frag_more (1);
-	      md_number_to_chars (p,
-				  (valueT) (i.sib.base << 0
-					    | i.sib.index << 3
-					    | i.sib.scale << 6),
-				  1);
-	    }
+	    FRAG_APPEND_1_CHAR ((i.sib.base << 0
+				 | i.sib.index << 3
+				 | i.sib.scale << 6));
 	}
 
       /* Write the DREX byte if needed.  */
@@ -6574,41 +6563,6 @@ md_convert_frag (abfd, sec, fragP)
   fragP->fr_fix += extension;
 }
 
-/* Size of byte displacement jmp.  */
-int md_short_jump_size = 2;
-
-/* Size of dword displacement jmp.  */
-int md_long_jump_size = 5;
-
-void
-md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
-     char *ptr;
-     addressT from_addr, to_addr;
-     fragS *frag ATTRIBUTE_UNUSED;
-     symbolS *to_symbol ATTRIBUTE_UNUSED;
-{
-  offsetT offset;
-
-  offset = to_addr - (from_addr + 2);
-  /* Opcode for byte-disp jump.  */
-  md_number_to_chars (ptr, (valueT) 0xeb, 1);
-  md_number_to_chars (ptr + 1, (valueT) offset, 1);
-}
-
-void
-md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
-     char *ptr;
-     addressT from_addr, to_addr;
-     fragS *frag ATTRIBUTE_UNUSED;
-     symbolS *to_symbol ATTRIBUTE_UNUSED;
-{
-  offsetT offset;
-
-  offset = to_addr - (from_addr + 5);
-  md_number_to_chars (ptr, (valueT) 0xe9, 1);
-  md_number_to_chars (ptr + 1, (valueT) offset, 4);
-}
-
 /* Apply a fixup (fixS) to segment data, once it has been determined
    by our caller that we have all the info we need to fix it up.
 



More information about the Binutils mailing list