gas/
authorMaciej W. Rozycki <macro@linux-mips.org>
Thu, 9 Dec 2010 23:57:22 +0000 (23:57 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Thu, 9 Dec 2010 23:57:22 +0000 (23:57 +0000)
* 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 `!'.

binutils/testsuite/ChangeLog
binutils/testsuite/lib/binutils-common.exp
gas/ChangeLog
gas/config/tc-mips.c
gas/testsuite/ChangeLog
gas/testsuite/gas/mips/elf_ase_mips16-2.d [new file with mode: 0644]
gas/testsuite/gas/mips/elf_ase_mips16.d
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/nop.s [new file with mode: 0644]

index e044acc13726815f86a72d017c187c87ab3eabac..1e5801b956d56183e49a16ae783e9fdd49a85392 100644 (file)
@@ -1,3 +1,8 @@
+2010-12-09  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * lib/binutils-common.exp (regexp_diff): Implement inverse
+       matching, requested by `!'.
+
 2010-11-20  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * lib/binutils-common.exp (regexp_diff): New procedure.
index 2f8b42652824f3475688a4112f5a0a8ff3f3382b..424ca3d7cd8c747f6b3f2a28b3720f4e6abb37bb 100644 (file)
@@ -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 ce56b30fc6e294038d55505d8dfb91229e9f1c94..fae5743f3f6a3634ea898b6ce65f56990fd0f995 100644 (file)
@@ -1,3 +1,9 @@
+2010-12-09  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * 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.
+
 2010-12-09  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * config/tc-mips.c (macro)
index 0473b10d442defc6dae7c98345b74707e9d197dc..64a0717d9b1e87949d2bc076a18691f1cfcb6319 100644 (file)
@@ -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              \
@@ -2811,6 +2810,8 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
   /* 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;
 
@@ -12045,7 +12046,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 8fff99dda73c96355274b6aa9541b41b82ab387b..3675cbc27425c2276bbc13f08d8d5f3c5e1c578b 100644 (file)
@@ -1,3 +1,11 @@
+2010-12-09  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * 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.
+
 2010-12-09  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * gas/mips/jal-svr4pic.d: Also use wildcard address matching in
diff --git a/gas/testsuite/gas/mips/elf_ase_mips16-2.d b/gas/testsuite/gas/mips/elf_ase_mips16-2.d
new file mode 100644 (file)
index 0000000..89b28b0
--- /dev/null
@@ -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 74bb9873e46cde6b3d431247036a2252e098ff66..89fbc5bd1912c74d7d32aa72810b2f895ff37381 100644 (file)
@@ -4,5 +4,5 @@
 # as: -32 -mips16
 
 .*:.*file format.*mips.*
-private flags = [0-9a-f]*[4-7c-f]......: .*[[,]mips16[],].*
+!private flags = .*mips16.*
 
index 6e98082c968c2d4452aa66a6d09c023328d3dd37..7075f9dd8e6abf1dd5531e95b86f4d512c483585 100644 (file)
@@ -743,7 +743,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"
diff --git a/gas/testsuite/gas/mips/nop.s b/gas/testsuite/gas/mips/nop.s
new file mode 100644 (file)
index 0000000..4e7fe2f
--- /dev/null
@@ -0,0 +1 @@
+       nop