This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: PATCH: Convert x86 assembler to bitfield


As I have mentioned before, this uses a C99/new GCC feature (designated
initializers) when you are building the x86 instruction tables.  I
really don't feel binutils should be using anything outside of C90
because binutils, like GCC is part of the kit needed to port to systems
using whatever compiler is available on the system.  In addition, I
wonder how many people still develop on ancient systems like SUSE SLES9
and Red Hat RHEL4 that have 3.4 and 3.3 based GCC compilers.  I really
would prefer not to have a situation like we have in GCC where you have
to have special versions of things (ie mpfr) that may are in conflict
with the versions installed on the system.

I wish some other maintainers would chime in as to whether this is a
good idea.

My concern is of course getting my patches in for SSE5 as quickly as
possible.  If it goes in quickly, I can adapt the SSE5 patches for the
new format, but if it will take a long time, I don't want my patches to
be held in limbo while we iterate over these new patches.  As I said, I
wrote the patches to cause a minimum change to the rest of the x86 port,
and with this change, we will need to make sure everything is right
because it is a much bigger change.

--
Michael Meissner
AMD, MS 83-29
90 Central Street
Boxborough, MA 01719

> -----Original Message-----
> From: H.J. Lu [mailto:hjl@lucon.org]
> Sent: Friday, September 07, 2007 5:06 PM
> To: Meissner, Michael
> Cc: Harle, Christophe; rajagopal, dwarak; binutils@sources.redhat.com
> Subject: PATCH: Convert x86 assembler to bitfield
> 
> On Fri, Sep 07, 2007 at 06:51:08AM -0700, H.J. Lu wrote:
> > The x86 assembler runs out of bits in unsigned int. This patch
> > converts it to use bitfield instead.  Here is a working patch.
> > I tested it on Linux/ia32 and Linux/x86-64.  I will clean it up
> > and submit it before Monday.
> >
> >
> 
> Here is the final patch to convert x86 assembler to bitfield.
> I will check it in on Sunday unless there is a strong objection
> before Sunday.
> 
> Thanks.
> 
> 
> H.J.
> ----
> gas/
> 
> 2007-09-07  H.J. Lu  <hongjiu.lu@intel.com>
> 
> 	* configure.in (AC_CHECK_HEADERS): Add limits.h.
> 	* configure: Regenerated.
> 	* config.in: Likewise.
> 
> 	* config/tc-i386.c: Include "opcodes/i386-init.h".
> 	(_i386_insn): Use i386_operand_type for types.
> 	(cpu_arch_flags): Updated to new types with bitfield.
> 	(cpu_arch_tune_flags): Likewise.
> 	(cpu_arch_isa_flags): Likewise.
> 	(cpu_arch): Likewise.
> 	(i386_align_code): Likewise.
> 	(set_code_flag): Likewise.
> 	(set_16bit_gcc_code_flag): Likewise.
> 	(set_cpu_arch): Likewise.
> 	(md_assemble): Likewise.
> 	(parse_insn): Likewise.
> 	(process_operands): Likewise.
> 	(output_branch): Likewise.
> 	(output_jump): Likewise.
> 	(parse_real_register): Likewise.
> 	(mode_from_disp_size): Likewise.
> 	(smallest_imm_type): Likewise.
> 	(pi): Likewise.
> 	(type_names): Likewise.
> 	(pt): Likewise.
> 	(pte): Likewise.
> 	(swap_2_operands): Likewise.
> 	(optimize_imm): Likewise.
> 	(optimize_disp): Likewise.
> 	(match_template): Likewise.
> 	(check_string): Likewise.
> 	(process_suffix): Likewise.
> 	(check_byte_reg): Likewise.
> 	(check_long_reg): Likewise.
> 	(check_qword_reg): Likewise.
> 	(check_word_reg): Likewise.
> 	(finalize_imm): Likewise.
> 	(build_modrm_byte): Likewise.
> 	(output_insn): Likewise.
> 	(disp_size): Likewise.
> 	(imm_size): Likewise.
> 	(output_disp): Likewise.
> 	(output_imm): Likewise.
> 	(gotrel): Likewise.
> 	(i386_immediate): Likewise.
> 	(i386_displacement): Likewise.
> 	(i386_index_check): Likewise.
> 	(i386_operand): Likewise.
> 	(parse_real_register): Likewise.
> 	(i386_intel_operand): Likewise.
> 	(intel_e09): Likewise.
> 	(intel_bracket_expr): Likewise.
> 	(intel_e11): Likewise.
> 	(cpu_arch_flags_not): New.
> 	(cpu_flags_check_x64): Likewise.
> 	(cpu_flags_all_zero): Likewise.
> 	(cpu_flags_not): Likewise.
> 	(i386_cpu_flags_biop): Likewise.
> 	(cpu_flags_biop): Likewise.
> 	(cpu_flags_match); Likewise.
> 	(acc32): New.
> 	(acc64): Likewise.
> 	(control): Likewise.
> 	(reg16_inoutportreg): Likewise.
> 	(disp16): Likewise.
> 	(disp32): Likewise.
> 	(disp32s): Likewise.
> 	(disp16_32): Likewise.
> 	(anydisp): Likewise.
> 	(baseindex): Likewise.
> 	(regxmm): Likewise.
> 	(imm8): Likewise.
> 	(imm8s): Likewise.
> 	(imm16): Likewise.
> 	(imm32): Likewise.
> 	(imm32s): Likewise.
> 	(imm64): Likewise.
> 	(imm16_32): Likewise.
> 	(imm16_32s): Likewise.
> 	(imm16_32_32s): Likewise.
> 	(operand_type): Likewise.
> 	(operand_type_check): Likewise.
> 	(operand_type_match): Likewise.
> 	(operand_type_register_match): Likewise.
> 	(update_imm): Likewise.
> 	(set_code_flag): Also update cpu_arch_flags_not.
> 	(set_16bit_gcc_code_flag): Likewise.
> 	(md_begin): Likewise.
> 	(parse_insn): Use cpu_flags_check_x64 to check 64bit support.
> 	Use cpu_flags_match to match instructions.
> 	(i386_target_format): Update cpu_arch_isa_flags and
> 	cpu_arch_tune_flags to i386_cpu_flags type with bitfield.
> 	(smallest_imm_type): Check cpu_arch_tune to tune for i486.
> 	(match_template): Don't initialize overlap0, overlap1,
> 	overlap2, overlap3 and operand_types.
> 	(process_suffix): Handle crc32 with 64bit register.
> 	(MATCH): Removed.
> 	(CONSISTENT_REGISTER_MATCH): Likewise.
> 
> 	* config/tc-i386.h (arch_entry): Updated to i386_cpu_flags
> 	type.
> 
> opcodes/
> 
> 2007-09-07  H.J. Lu  <hongjiu.lu@intel.com>
> 
> 	* configure.in (AC_CHECK_HEADERS): Add limits.h.
> 	* configure: Regenerated.
> 	* config.in: Likewise.
> 
> 	* i386-gen.c: Include "sysdep.h" instead of <stdlib.h> and
> 	<string.h>.  Use xstrerror instead of strerror.
> 	(initializer): New.
> 	(cpu_flag_init): Likewise.
> 	(bitfield): Likewise.
> 	(BITFIELD): New.
> 	(cpu_flags): Likewise.
> 	(opcode_modifiers): Likewise.
> 	(operand_types): Likewise.
> 	(compare): Likewise.
> 	(set_cpu_flags): Likewise.
> 	(output_cpu_flags): Likewise.
> 	(process_i386_cpu_flags): Likewise.
> 	(output_opcode_modifier): Likewise.
> 	(process_i386_opcode_modifier): Likewise.
> 	(output_operand_type): Likewise.
> 	(process_i386_operand_type): Likewise.
> 	(set_bitfield): Likewise.
> 	(operand_type_init): Likewise.
> 	(process_i386_initializers): Likewise.
> 	(process_i386_opcodes): Call process_i386_opcode_modifier to
> 	process opcode_modifier.  Call process_i386_operand_type to
> 	process operand_types.
> 	(process_i386_registers): Call process_i386_operand_type to
> 	process reg_type.
> 	(main): Check unused bits in i386_cpu_flags and
i386_operand_type.
> 	Sort cpu_flags, opcode_modifiers and operand_types.  Call
> 	process_i386_initializers.
> 
> 	* i386-init.h: New.
> 	* i386-tbl.h: Regenerated.
> 
> 	* i386-opc.h: Include <limits.h>.
> 	(CHAR_BIT): Define as 8 if not defined.
> 	(Cpu186): Changed to position of bitfiled.
> 	(Cpu286): Likewise.
> 	(Cpu386): Likewise.
> 	(Cpu486): Likewise.
> 	(Cpu586): Likewise.
> 	(Cpu686): Likewise.
> 	(CpuP4): Likewise.
> 	(CpuK6): Likewise.
> 	(CpuK8): Likewise.
> 	(CpuMMX): Likewise.
> 	(CpuMMX2): Likewise.
> 	(CpuSSE): Likewise.
> 	(CpuSSE2): Likewise.
> 	(Cpu3dnow): Likewise.
> 	(Cpu3dnowA): Likewise.
> 	(CpuSSE3): Likewise.
> 	(CpuPadLock): Likewise.
> 	(CpuSVME): Likewise.
> 	(CpuVMX): Likewise.
> 	(CpuSSSE3): Likewise.
> 	(CpuSSE4a): Likewise.
> 	(CpuABM): Likewise.
> 	(CpuSSE4_1): Likewise.
> 	(CpuSSE4_2): Likewise.
> 	(Cpu64): Likewise.
> 	(CpuNo64): Likewise.
> 	(D): Likewise.
> 	(W): Likewise.
> 	(Modrm): Likewise.
> 	(ShortForm): Likewise.
> 	(Jump): Likewise.
> 	(JumpDword): Likewise.
> 	(JumpByte): Likewise.
> 	(JumpInterSegment): Likewise.
> 	(FloatMF): Likewise.
> 	(FloatR): Likewise.
> 	(FloatD): Likewise.
> 	(Size16): Likewise.
> 	(Size32): Likewise.
> 	(Size64): Likewise.
> 	(IgnoreSize): Likewise.
> 	(DefaultSize): Likewise.
> 	(No_bSuf): Likewise.
> 	(No_wSuf): Likewise.
> 	(No_lSuf): Likewise.
> 	(No_sSuf): Likewise.
> 	(No_qSuf): Likewise.
> 	(No_xSuf): Likewise.
> 	(FWait): Likewise.
> 	(IsString): Likewise.
> 	(RegKludge): Likewise.
> 	(IsPrefix): Likewise.
> 	(ImmExt): Likewise.
> 	(NoRex64): Likewise.
> 	(Rex64): Likewise.
> 	(Ugh): Likewise.
> 	(Reg8): Likewise.
> 	(Reg16): Likewise.
> 	(Reg32): Likewise.
> 	(Reg64): Likewise.
> 	(FloatReg): Likewise.
> 	(RegMMX): Likewise.
> 	(RegXMM): Likewise.
> 	(Imm8): Likewise.
> 	(Imm8S): Likewise.
> 	(Imm16): Likewise.
> 	(Imm32): Likewise.
> 	(Imm32S): Likewise.
> 	(Imm64): Likewise.
> 	(Imm1): Likewise.
> 	(BaseIndex): Likewise.
> 	(Disp8): Likewise.
> 	(Disp16): Likewise.
> 	(Disp32): Likewise.
> 	(Disp32S): Likewise.
> 	(Disp64): Likewise.
> 	(InOutPortReg): Likewise.
> 	(ShiftCount): Likewise.
> 	(Control): Likewise.
> 	(Debug): Likewise.
> 	(Test): Likewise.
> 	(SReg2): Likewise.
> 	(SReg3): Likewise.
> 	(Acc): Likewise.
> 	(FloatAcc): Likewise.
> 	(JumpAbsolute): Likewise.
> 	(EsSeg): Likewise.
> 	(RegMem): Likewise.
> 	(OTMax): Likewise.
> 	(Reg): Commented out.
> 	(WordReg): Likewise.
> 	(ImplicitRegister): Likewise.
> 	(Imm): Likewise.
> 	(EncImm): Likewise.
> 	(Disp): Likewise.
> 	(AnyMem): Likewise.
> 	(LLongMem): Likewise.
> 	(LongMem): Likewise.
> 	(ShortMem): Likewise.
> 	(WordMem): Likewise.
> 	(ByteMem): Likewise.
> 	(CpuMax): New
> 	(CpuLM): Likewise.
> 	(CpuNumOfUints): Likewise.
> 	(CpuNumOfBits): Likewise.
> 	(CpuUnused): Likewise.
> 	(OTNumOfUints): Likewise.
> 	(OTNumOfBits): Likewise.
> 	(OTUnused): Likewise.
> 	(i386_cpu_flags): New type.
> 	(i386_operand_type): Likewise.
> 	(i386_opcode_modifier): Likewise.
> 	(CpuSledgehammer): Removed.
> 	(CpuSSE4): Likewise.
> 	(CpuUnknownFlags): Likewise.
> 	(Reg): Likewise.
> 	(WordReg): Likewise.
> 	(ImplicitRegister): Likewise.
> 	(Imm): Likewise.
> 	(EncImm): Likewise.
> 	(Disp): Likewise.
> 	(AnyMem): Likewise.
> 	(LLongMem): Likewise.
> 	(LongMem): Likewise.
> 	(ShortMem): Likewise.
> 	(WordMem): Likewise.
> 	(ByteMem): Likewise.
> 	(template): Use i386_cpu_flags for cpu_flags, use
> 	i386_opcode_modifier for opcode_modifier, use
> 	i386_operand_type for operand_types.
> 	(reg_entry): Use i386_operand_type for reg_type.
> 
> 	* Makefile.am (HFILES): Add i386-init.h.
> 	($(srcdir)/i386-init.h): New rule.
> 	($(srcdir)/i386-tbl.h): Depend on $(srcdir)/i386-init.h
> 	instead.
> 	 Makefile.in: Regenerated.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]