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 19/20] MIPS/GAS: Only set the MIPS16 flag if code produced


On Tue, 7 Dec 2010, Richard Sandiford wrote:

> OK with a couple of niggles fixed:
> 
> 1. The new test should be "elf_ase_mips16-2.d" rather than "-1.d".
>    Either leave "elf_ase_mips16.d" with its current name or change
>    the filename to "elf_ase_mips16-1.d".  (The former seems less
>    disruptive, but feel free to do the latter if you prefer.)

 I would have renamed the file if we had an RCS capable of tracking such 
operations, such as SVN or GIT.  With CVS I feel it would be unnecessary 
obfuscation.

> 2. In this hunk:
> 
> > -private flags = [0-9a-f]*[4-7c-f]......: .*[[,]mips16[],].*
> > +!private flags = .{1,8}: .*[[,]mips16[],].*
> 
> I think it's better to make the inverted regexp as loose as possible.
> I.e.:
> 
> !private flags = .*mips16.*
> 
> if indeed that works.

 This is what I committed.

2010-12-09  Maciej W. Rozycki  <macro@codesourcery.com>

	gas/
	* config/tc-mips.c (file_ase_mips16): Adjust comment.
	(append_insn): Update file_ase_mips16.
	(mips_after_parse_args): Don't set file_ase_mips16 here.

	gas/testsuite/
	* gas/mips/elf_ase_mips16.d: Update test for new MIPS16 ASE flag
	semantics.
	* gas/mips/elf_ase_mips16-2.d: New test.
	* gas/mips/nop.s: Source for the new test.
	* gas/mips/mips.exp: Run the new test.

	binutils/testsuite/
	* lib/binutils-common.exp (regexp_diff): Implement inverse
	matching, requested by `!'.

  Maciej

binutils-gas-mips16-ase.diff
Index: binutils-fsf-trunk-quilt/gas/config/tc-mips.c
===================================================================
--- binutils-fsf-trunk-quilt.orig/gas/config/tc-mips.c	2010-12-09 02:34:55.000000000 +0000
+++ binutils-fsf-trunk-quilt/gas/config/tc-mips.c	2010-12-09 02:34:55.000000000 +0000
@@ -282,8 +282,7 @@ unsigned long mips_cprmask[4];
 /* MIPS ISA we are using for this output file.  */
 static int file_mips_isa = ISA_UNKNOWN;
 
-/* True if -mips16 was passed or implied by arguments passed on the
-   command line (e.g., by -march).  */
+/* True if any MIPS16 code was produced.  */
 static int file_ase_mips16;
 
 #define ISA_SUPPORTS_MIPS16E (mips_opts.isa == ISA_MIPS32		\
@@ -2823,6 +2822,8 @@ append_insn (struct mips_cl_insn *ip, ex
   /* Mark instruction labels in mips16 mode.  */
   mips16_mark_labels ();
 
+  file_ase_mips16 |= mips_opts.mips16;
+
   prev_pinfo = history[0].insn_mo->pinfo;
   pinfo = ip->insn_mo->pinfo;
 
@@ -12027,7 +12028,6 @@ mips_after_parse_args (void)
 	     mips_cpu_info_from_isa (mips_opts.isa)->name);
 
   file_mips_isa = mips_opts.isa;
-  file_ase_mips16 = mips_opts.mips16;
   file_ase_mips3d = mips_opts.ase_mips3d;
   file_ase_mdmx = mips_opts.ase_mdmx;
   file_ase_smartmips = mips_opts.ase_smartmips;
Index: binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/elf_ase_mips16-2.d
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/elf_ase_mips16-2.d	2010-12-09 02:34:55.000000000 +0000
@@ -0,0 +1,8 @@
+# name: ELF MIPS16 ASE markings 2
+# source: nop.s
+# objdump: -p
+# as: -32 -mips16
+
+.*:.*file format.*mips.*
+private flags = [0-9a-f]*[4-7c-f]......: .*[[,]mips16[],].*
+
Index: binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/elf_ase_mips16.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/gas/testsuite/gas/mips/elf_ase_mips16.d	2010-12-09 02:34:45.000000000 +0000
+++ binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/elf_ase_mips16.d	2010-12-09 02:34:55.000000000 +0000
@@ -4,5 +4,5 @@
 # as: -32 -mips16
 
 .*:.*file format.*mips.*
-private flags = [0-9a-f]*[4-7c-f]......: .*[[,]mips16[],].*
+!private flags = .*mips16.*
 
Index: binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/nop.s
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/nop.s	2010-12-09 02:34:55.000000000 +0000
@@ -0,0 +1 @@
+	nop
Index: binutils-fsf-trunk-quilt/binutils/testsuite/lib/binutils-common.exp
===================================================================
--- binutils-fsf-trunk-quilt.orig/binutils/testsuite/lib/binutils-common.exp	2010-12-09 02:34:45.000000000 +0000
+++ binutils-fsf-trunk-quilt/binutils/testsuite/lib/binutils-common.exp	2010-12-09 02:34:55.000000000 +0000
@@ -167,7 +167,9 @@ proc is_elf64 { binary_file } {
 #    REGEXP
 #        Skip all lines in FILE_1 until the first that matches REGEXP.
 #
-# Other # lines are comments.  Skip empty lines in both files.
+# Other # lines are comments.  Regexp lines starting with the `!' character
+# specify inverse matching (use `\!' for literal matching against a leading
+# `!').  Skip empty lines in both files.
 #
 # The first optional argument is a list of regexp substitutions of the form:
 #
@@ -235,12 +237,15 @@ proc regexp_diff { file_1 file_2 args } 
 		    set diff_pass 1
 		    break
 		}
+		set negated [expr { [string index $line_b 0] eq "!" }]
+		set line_bx [string range $line_b $negated end]
+		set n [expr { $negated ? "! " : "" }]
 		# Substitute on the reference.
 		foreach {name value} $ref_subst {
-		    regsub -- $name $line_b $value line_b
+		    regsub -- $name $line_bx $value line_bx
 		}
-		verbose "looking for \"^$line_b$\"" 3
-		while { ![regexp "^$line_b$" "$line_a"] } {
+		verbose "looking for $n\"^$line_bx$\"" 3
+		while { [expr [regexp "^$line_bx$" "$line_a"] == $negated] } {
 		    verbose "skipping    \"$line_a\"" 3
 		    if { [gets $file_a line_a] == $eof } {
 			set end_1 1
@@ -270,14 +275,18 @@ proc regexp_diff { file_1 file_2 args } 
 	    set differences 1
 	    break
 	} else {
+	    set negated [expr { [string index $line_b 0] eq "!" }]
+	    set line_bx [string range $line_b $negated end]
+	    set n [expr { $negated ? "! " : "" }]
+	    set s [expr { $negated ? "  " : "" }]
 	    # Substitute on the reference.
 	    foreach {name value} $ref_subst {
-		regsub -- $name $line_b $value line_b
+		regsub -- $name $line_bx $value line_bx
 	    }
-	    verbose "regexp \"^$line_b$\"\nline   \"$line_a\"" 3
-	    if { ![regexp "^$line_b$" "$line_a"] } {
+	    verbose "regexp $n\"^$line_bx$\"\nline   \"$line_a\"" 3
+	    if { [expr [regexp "^$line_bx$" "$line_a"] == $negated] } {
 		send_log "regexp_diff match failure\n"
-		send_log "regexp \"^$line_b$\"\nline   \"$line_a\"\n"
+		send_log "regexp $n\"^$line_bx$\"\nline   $s\"$line_a\"\n"
 		verbose "regexp_diff match failure\n" 3
 		set differences 1
 	    }
Index: binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/mips.exp
===================================================================
--- binutils-fsf-trunk-quilt.orig/gas/testsuite/gas/mips/mips.exp	2010-12-09 02:34:51.000000000 +0000
+++ binutils-fsf-trunk-quilt/gas/testsuite/gas/mips/mips.exp	2010-12-09 02:34:55.000000000 +0000
@@ -744,7 +744,10 @@ if { [istarget mips*-*-vxworks*] } {
 	run_dump_test "elf_arch_mips64r2"
 
 	# Verify that ASE markings are handled properly.
-	if { !$no_mips16 } { run_dump_test "elf_ase_mips16" }
+	if { !$no_mips16 } {
+	    run_dump_test "elf_ase_mips16"
+	    run_dump_test "elf_ase_mips16-2"
+	}
 
  	run_dump_test "mips-gp32-fp32-pic"
  	run_dump_test "mips-gp32-fp64-pic"


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