diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 18 | ||||
-rw-r--r-- | gas/NEWS | 2 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 17 | ||||
-rw-r--r-- | gas/doc/as.texi | 8 | ||||
-rw-r--r-- | gas/doc/c-mips.texi | 16 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/loongson-ext2.d | 28 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/loongson-ext2.s | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 1 |
8 files changed, 96 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 94fd28c..34efeb5 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,23 @@ 2018-08-29 Chenghua Xu <paul.hua.gm@gmail.com> + * NEWS: Mention Loongson EXTensions R2 (EXT2) support. + * config/tc-mips.c (options): Add OPTION_LOONGSON_EXT2 and + OPTION_NO_LOONGSON_EXT2. + (md_longopts): Likewise. + (mips_ases): Define availability for EXT. + (mips_convert_ase_flags): Map ASE_LOONGSON_EXT2 to + AFL_ASE_LOONGSON_EXT2. + (md_show_usage): Add help for -mloongson-ext2 and + -mno-loongson-ext2. + * doc/as.texi: Document -mloongson-ext2, -mno-loongson-ext2. + * doc/c-mips.texi: Document -mloongson-ext2, -mno-loongson-ext2, + .set loongson-ext2 and .set noloongson-ext2. + * testsuite/gas/mips/loongson-ext2.d: New test. + * testsuite/gas/mips/loongson-ext2.s: New test. + * testsuite/gas/mips/mips.exp: Run loongson-ext2 test. + +2018-08-29 Chenghua Xu <paul.hua.gm@gmail.com> + * NEWS: Mention Loongson EXTensions (EXT) support. * config/tc-mips.c (options): Add OPTION_LOONGSON_EXT and OPTION_NO_LOONGSON_EXT. @@ -1,5 +1,7 @@ -*- text -*- +* Add support for the MIPS Loongson EXTensions R2 (EXT2) instructions. + * Add support for the MIPS Loongson EXTensions (EXT) instructions. * Add support for the MIPS Loongson Content Address Memory (CAM) ASE. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 51eee00..e60cf4e 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -1535,6 +1535,8 @@ enum options OPTION_NO_LOONGSON_CAM, OPTION_LOONGSON_EXT, OPTION_NO_LOONGSON_EXT, + OPTION_LOONGSON_EXT2, + OPTION_NO_LOONGSON_EXT2, OPTION_END_OF_ENUM }; @@ -1601,6 +1603,8 @@ struct option md_longopts[] = {"mno-loongson-cam", no_argument, NULL, OPTION_NO_LOONGSON_CAM}, {"mloongson-ext", no_argument, NULL, OPTION_LOONGSON_EXT}, {"mno-loongson-ext", no_argument, NULL, OPTION_NO_LOONGSON_EXT}, + {"mloongson-ext2", no_argument, NULL, OPTION_LOONGSON_EXT2}, + {"mno-loongson-ext2", no_argument, NULL, OPTION_NO_LOONGSON_EXT2}, /* Old-style architecture options. Don't add more of these. */ {"m4650", no_argument, NULL, OPTION_M4650}, @@ -1813,6 +1817,11 @@ static const struct mips_ase mips_ases[] = { OPTION_LOONGSON_EXT, OPTION_NO_LOONGSON_EXT, 0, 0, -1, -1, -1 }, + + { "loongson-ext2", ASE_LOONGSON_EXT | ASE_LOONGSON_EXT2, 0, + OPTION_LOONGSON_EXT2, OPTION_NO_LOONGSON_EXT2, + 0, 0, -1, -1, + -1 }, }; /* The set of ASEs that require -mfp64. */ @@ -1820,7 +1829,8 @@ static const struct mips_ase mips_ases[] = { /* Groups of ASE_* flags that represent different revisions of an ASE. */ static const unsigned int mips_ase_groups[] = { - ASE_DSP | ASE_DSPR2 | ASE_DSPR3 + ASE_DSP | ASE_DSPR2 | ASE_DSPR3, + ASE_LOONGSON_EXT | ASE_LOONGSON_EXT2 }; /* Pseudo-op table. @@ -19050,6 +19060,8 @@ mips_convert_ase_flags (int ase) ext_ases |= AFL_ASE_LOONGSON_CAM; if (ase & ASE_LOONGSON_EXT) ext_ases |= AFL_ASE_LOONGSON_EXT; + if (ase & ASE_LOONGSON_EXT2) + ext_ases |= AFL_ASE_LOONGSON_EXT2; return ext_ases; } @@ -20080,6 +20092,9 @@ MIPS options:\n\ -mloongson-ext generate Loongson EXTensions (EXT) instructions\n\ -mno-loongson-ext do not generate Loongson EXTensions Instructions\n")); fprintf (stream, _("\ +-mloongson-ext2 generate Loongson EXTensions R2 (EXT2) instructions\n\ +-mno-loongson-ext2 do not generate Loongson EXTensions R2 Instructions\n")); + fprintf (stream, _("\ -minsn32 only generate 32-bit microMIPS instructions\n\ -mno-insn32 generate all microMIPS instructions\n")); fprintf (stream, _("\ diff --git a/gas/doc/as.texi b/gas/doc/as.texi index 92dd366..f3285b6 100644 --- a/gas/doc/as.texi +++ b/gas/doc/as.texi @@ -447,6 +447,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. [@b{-mloongson-mmi}] [@b{-mno-loongson-mmi}] [@b{-mloongson-cam}] [@b{-mno-loongson-cam}] [@b{-mloongson-ext}] [@b{-mno-loongson-ext}] + [@b{-mloongson-ext2}] [@b{-mno-loongson-ext2}] [@b{-minsn32}] [@b{-mno-insn32}] [@b{-mfix7000}] [@b{-mno-fix7000}] [@b{-mfix-rm7000}] [@b{-mno-fix-rm7000}] @@ -1587,6 +1588,13 @@ Generate code for the Loongson EXTensions (EXT) instructions. This tells the assembler to accept Loongson EXT instructions. @samp{-mno-loongson-ext} turns off this option. +@item -mloongson-ext2 +@itemx -mno-loongson-ext2 +Generate code for the Loongson EXTensions R2 (EXT2) instructions. +This option implies @samp{-mloongson-ext}. +This tells the assembler to accept Loongson EXT2 instructions. +@samp{-mno-loongson-ext2} turns off this option. + @item -minsn32 @itemx -mno-insn32 Only use 32-bit instruction encodings when generating code for the diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi index 80b4160..f74e10f 100644 --- a/gas/doc/c-mips.texi +++ b/gas/doc/c-mips.texi @@ -267,6 +267,13 @@ Application Specific Extension. This tells the assembler to accept EXT instructions. @samp{-mno-loongson-ext} turns off this option. +@item -mloongson-ext2 +@itemx -mno-loongson-ext2 +Generate code for the Loongson EXTensions R2 (EXT2) instructions +Application Specific Extension. This tells the assembler to accept EXT2 +instructions. +@samp{-mno-loongson-ext2} turns off this option. + @item -minsn32 @itemx -mno-insn32 Only use 32-bit instruction encodings when generating code for the @@ -1182,6 +1189,15 @@ instructions from the Loongson EXT from that point on in the assembly. The @code{.set noloongson-ext} directive prevents Loongson EXT instructions from being accepted. +@cindex Loongson EXTensions R2 (EXT2) instructions generation override +@kindex @code{.set loongson-ext2} +@kindex @code{.set noloongson-ext2} +The directive @code{.set loongson-ext2} makes the assembler accept +instructions from the Loongson EXT2 from that point on in the assembly. +This directive implies @code{.set loognson-ext}. +The @code{.set noloongson-ext2} directive prevents Loongson EXT2 instructions +from being accepted. + Traditional MIPS assemblers do not support these directives. @node MIPS Floating-Point diff --git a/gas/testsuite/gas/mips/loongson-ext2.d b/gas/testsuite/gas/mips/loongson-ext2.d new file mode 100644 index 0000000..d821386 --- /dev/null +++ b/gas/testsuite/gas/mips/loongson-ext2.d @@ -0,0 +1,28 @@ +#as: -mloongson-ext2 -mabi=64 +#objdump: -M reg-names=numeric -M loongson-ext2 -dp +#name: Loongson EXT2 tests + +.*: file format .* + +private flags = .* + +MIPS ABI Flags Version: 0 +ISA: .* +GPR size: .* +CPR1 size: .* +CPR2 size: .* +FP ABI: .* +ISA Extension: None +ASEs: + Loongson EXT ASE + Loongson EXT2 ASE +FLAGS 1: .* +FLAGS 2: .* + +Disassembly of section .text: + +[0-9a-f]+ <.text>: +.*: 70801062 cto \$2,\$4 +.*: 70801022 ctz \$2,\$4 +.*: 708010e2 dcto \$2,\$4 +.*: 708010a2 dctz \$2,\$4 diff --git a/gas/testsuite/gas/mips/loongson-ext2.s b/gas/testsuite/gas/mips/loongson-ext2.s new file mode 100644 index 0000000..023a469 --- /dev/null +++ b/gas/testsuite/gas/mips/loongson-ext2.s @@ -0,0 +1,7 @@ + .text + .set noreorder + + cto $2,$4 + ctz $2,$4 + dcto $2,$4 + dctz $2,$4 diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 2f6ddc9..cb1da9a 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -1395,6 +1395,7 @@ if { [istarget mips*-*-vxworks*] } { run_dump_test "loongson-3a-mmi" run_dump_test "loongson-cam" + run_dump_test "loongson-ext2" if { $has_newabi } { run_dump_test_arches "octeon" [mips_arch_list_matching octeon] |